Bewegungsrichtung ermitteln

Raziell

Bekanntes Mitglied
Hallo zusammen,
ich stehe gerade ein bisschen auf dem Schlauch. Ich habe eine Figur die sich Vertikal, Horizontal sowie Diagonal bewegen lässt. Das heißt in 8 verschiedene Richtungen. Zu jeder Bewegungsrichtung gibt es ein entsprechendes Bild. Wie kann man am einfachsten die aktuelle Richtung ermitteln, in die die Figur sich bewegt um das richtige Bild anzeigen zu können. Das einzige was mir spontan einfällt wäre alle Kombination durchzugehen, allerdings halte ich das für sehr unschön.

Sprich:
Java:
if (up && !right && !down && !left) {
zeigeBildHoch
} else if (up && right && !down && !left){
zeigeBildHochRechts
}
...

Ich bin mir sicher es gibt eine schönere Lösung nur fällt mir leider gerade keine ein.

EDIT:
Ich arbeite mit Slick und prüfen mit isKeyDown.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Die Frage, wie und wo diese Flags gesetzt werden, könnte auch interessant sein. (Ich meine nur, das der Fall
if (up && down)
wohl nicht eintreten kann...). Die Alternative wäre ggf. eine enum mit den 8 Bewegungsrichtungen, aber vieeel einfacher/weniger Code würde es damit vermutlich auch nicht (bzw. es würde sich nur ein Teil der Abfragen an die Stelle verlagen (isKeyDown) wo diese Enum bestimmt wird).
 

Helgon

Bekanntes Mitglied
Hmm.. sind eben paar if zweige.. bisschen kürzen könnte man vllt indem man ne methode schreibt wie

Java:
bool OnlyKeyDown(String direction){
for(String s : allDirections){
   if(s != direction && s == true) return false;
}
return true;
}

// und dann machste eben 

if(OnlyKeyDown(up)) moveUp();

Einfach bisschen kürzer, darum gings dir ja glaub ich? Und wenns ganz schön sein sollte wie marco sagte mit nem enum
 

Raziell

Bekanntes Mitglied
Also derzeit werden im Keydown der einzelnen Tasten (W,A,S,D) die Flags gesetzt.
Es kann somit theoretisch auch sein, dass man alle vier Tasten auf einmal drückt und somit alle Flags
true sind. Es kann also sowohl up als auch down true sein. Der Spieler bewegt sich dann halt weder nach oben noch nach unten. Ich müsste somit theoretisch 16 Kombinationen prüfen. :lol:

Mir fällt aber gerade ein das ich ja auch anhand der alten und neuen Position den Winkel berechnen könnte und anhand des Bewegungswinkels dann die Richtung bestimme. Dann hätte ich nur 8 Abfragen.
 

Ähnliche Java Themen


Oben