# Bewegungsrichtung ermitteln



## Raziell (24. Dez 2012)

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:

```
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.


----------



## Marco13 (24. Dez 2012)

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 (24. Dez 2012)

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


```
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 (24. Dez 2012)

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.


----------

