Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-06-2008, 10:33   #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
frauke5 ist offline   Mit Zitat antworten
Alt 11-06-2008, 11:46   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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)
hgseib ist offline   Mit Zitat antworten
Alt 11-06-2008, 14:24   #3 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
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
damit kannst du nun rechnen
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;
so bewegst du dich immer in richtung des winkels.
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)
_crypto_ ist offline   Mit Zitat antworten
Alt 11-06-2008, 15:55   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
[OT]
Zitat:
Zitat von _crypto_ Beitrag anzeigen
nicht durchblickst (wie ich bei dir immer hgseib :P)
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)
hgseib ist offline   Mit Zitat antworten
Alt 11-06-2008, 16:21   #5 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
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
_crypto_ ist offline   Mit Zitat antworten
Alt 11-06-2008, 16:34   #6 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
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
_crypto_ ist offline   Mit Zitat antworten
Alt 11-06-2008, 21:40   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 2
Smile

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
frauke5 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele