| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jan 2004
Beiträge: 2
| Steuerung mit Rotation
Hallo, ich komme nicht weiter. Ich habe (zum ersten Mal) versucht, eine Steuerung zu programmieren, bei der ein Objekt mit Hilfe der Pfeiltasten "links" und "rechts" jeweils nach links oder rechts um 10 grad rotiert und dann mit der Key.Up-Taste in die entsprechende Richtung laufen soll, also wohl ein recht gängiges Problem, das ich aber nicht hinbekomme. Die Rotation beträgt, wie gesagt, jeweils 10 Grad, also umgerechnet in Bogenmaß Math.PI/180*this._rotation , wenn ich das richtig sehe. Mein Objekt läuft aber derzeit noch nicht in die richtige Richtung. Ich habe mit der trigonometrischen Formel _x (oder _y)= x (oder _y) + (oder minus, je nachdem) radius*sin (bzw. cos) (bogenmaß) gerechnet. Da es eine negative oder positive Rotation geben kann und die Berechnung bei jedem Quadranten anders aussieht (falls ich keinen Denkfehler habe), habe ich insgesamt 8 If-Bedingungen geschrieben. Möglicherweise ist dass schon ein Fehler? Und dann würde ich gerne wissen, wie die Sache mit der Rotation funktioniert. Also: Wenn ich beispielsweise auf die links-Taste drücke und dort definiert habe, dass this._rotation -= 10; ist und dann nach vorne gehe und dann nochmal die links-Taste drücke: ist dann this._rotation wieder nur -10 oder merkt sich Flash das und ist dann this._rotation = -20;? In jedem Fall funktioniert mein Skript nicht. Ich bitte um HIIILFE, weil ich einfach nicht checke, was ich falsch gemacht habe. Bisher ist das alles noch ein wenig konfus in meinem Kopf, da ich auch nicht weiß, ob obige Formel überhaupt angewendet werden kann, wenn die Rotation größer als 90 ist. Kann mir jemand helfen? Gruß, Frauke |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
willkommen im forum leider sind wir hier unfähig hellseherisch zu sein ;-) um zu sehen ob und was an deinem script nicht stimmt musst du diesen schon veröffentlichen. am besten deine fla hochladen (auf das problem reduziert, also keine fetten bilder usw.), dann kann man direkt was ausprobieren. allgemein: einmal rundherum ist 360 grad (z.b. von -180 bis +180) das ist die richtung. mehr gibts nicht und grössere/ kleinere werte werden automatisch auf das begrenzt. nach einer drehung von z.b. 370 grad zeigt das objekt in die richtung 10 grad _rotation -= 10; das ist die kurzschreibweisse von _rotation = _rotation-10; also vom vorhandenen wert eine zahl subtrahieren _rotation = -10; das ist eine wert zuweissung. in diesem fall die zahl minus zehn. http://www.seibsprogrammladen.de/fra...ispiele/flash6 -> Spiele ... Auto über eine 8-er Bahn fahren ... Nase: Figur bewegen und einfachste Kollisionserkennung ... Schiessen: Der Buttler schiesst in der Wohnung herum hier werden objekte mit den tasten bewegt und gedreht
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (11-06-2008 um 12:43 Uhr) |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 1.573
|
oder falls du durch die flas nicht durchblickst (wie ich bei dir immer hgseib :P) dann stells dir so vor: einheitskreis sagt dir was? dort ist der x-anteil der kosinus des winkels der sinus ist dementsprechen der y-anteil des radius. wenn du also bei 0 grad deinen spieler bewegen willst, dann ist sin(0) = 0 denn du must dich ja nur auf der x achse bewegen. bei 90° bzw. PI/2 nur in y richtung deswegen passt es das dort der kosinus anteil genau 0 ist ![]() also allgemein gesagt: Code: cos(w) = b/c sin(w) = a/c Code: // enspricht hier dem radius des kreises var speed: int = 5; /* da cos²(w) + sin²(w) = 1 für den einheitskreis gilt: speed * cos²(w) + speed * sin²(w) = speed nur aufgeteilt auf x und y anteil */ var w: Number = clip.rotation / 180*Math.PI; var speedX: Number = speed * Math.cos( w ); var speedY: Number = speed * Math.sin( w ); clip.x += speedX; clip.y += speedY; ist im grunde ncihts anderes als vektorrechnung. wenn du deine geschwindigkeit, die ein vektor ist in x und y anteil auf teilst bekommst du eben die geschw. für die enstrpechenden achsen wieder. hoffe das hilft ein bisschen
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi Geändert von _crypto_ (11-06-2008 um 14:26 Uhr) |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
[OT] das ist so korrekt. ich bin nicht durchsichtig ;-) [edit] sorry stimmt, du hast recht.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (11-06-2008 um 16:37 Uhr) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 1.573
|
wieso das ist 30? das ist satz des pythagoras, nenns kosinussatz aber ich wollte ihm zeigen das sich die geschwindigkeit als vektor aus x und y anteil berechnen läßt und dieser eben mithilfe trigonometrie zustande kommt ![]() und das mit dem undurchsichtig war so, weil ich mir ab und an in den jungen tagen deine beispiele geladen habe aber nie was verstanden habe. mittlerweile brauch ich dafür nichtmehr soviel zeit. aber fremden code pack ich eh nicht so gerne an ![]() lieber selber machen.
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 1.573
|
da stehts ja: http://de.wikipedia.org/wiki/Kosinus...us_und_Kosinus und wenn ich einfach * r rechne ist das doch richtig? und es stimmt ja auch ![]() ich meine aber so sieht man eben sich speed aus dem kosinus und sinus anteil berechnen läßt. jops deswegen müssen wir auch nich weiter drauf eingehen :P
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Jan 2004
Beiträge: 2
|
Vielen Dank für Eure Antworten. Ich habs nun endlich hinbekommen. Es war viel einfacher, als ich gedacht hatte. Die Erläuterung über die Rotation erklärt nun auch warum. Ich hab viel zu kompliziert gedacht. Vielen Dank nochmal und LG, Frauke |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |