2009-03-12 5 views
3

Ich arbeite an einem Roguelike-Stil Handy-Spiel, das auf einem Gitter arbeitet. Angriffe/Gegenstände in diesem Spiel funktionieren, indem Sie Kacheln in einem Muster relativ zum Benutzer ausrichten. Die paturn ist in der Regel relativ zur Richtung der Benutzer in als auch dem Ziel, zum Beispiel in diesem screenshot das Musterj2me - Drehen Sie Array von 2d Punkte in 45-Grad-Schritten

Point2d[] damageTiles = new Point2d[4]; 

damageTiles[0] = new Point2d(0, -1); 
damageTiles[1] = new Point2d(0, -2); 
damageTiles[2] = new Point2d(1, -2); 
damageTiles[3] = new Point2d(-1, -2); 

zeigen relativ zu einem temporären Feind ist (die gelbe Box) mit dem Ziel „oben“.

Ich habe derzeit einfachen Code, um ein Muster-Array um 90-Grad-Schritten zu drehen, wie gesehen here. Meine Frage ist, gibt es eine einfache Möglichkeit, ein Array von 2d Punkte in 45 Grad Schritten zu drehen, so dass meine Angriffe/Elemente auf der Diagonale, vorzugsweise ohne Fließkomma-Mathematik, wie es langsam auf vielen Telefonen (oder läuft also höre ich). Dies ist wahrscheinlich eine triviale Frage für jeden, der mit der Grafikprogrammierung vertraut ist, aber ich wurde mit einem Fall von Codiererblockade konfrontiert.

Mein aktueller Rotationscode ist unten abgebildet. Ich erkenne jetzt, dass ein besserer Weg es wäre, einen Winkel statt einer "Richtung" zu nehmen und die Punkte um diesen Winkel zu drehen (Winkel ablehnen, die natürlich keine Vielfachen von 45 sind).

private Point2d[] rotateList(Point2d[] points, int direction) { 
    for (int i = 0; i < points.length; i++) { 

     if (direction == ROTATE_LEFT) { 
      int temp = points[i].x; 
      points[i].x = points[i].y; 
      points[i].y = -1 * temp; 
     } 
     else if (direction == ROTATE_RIGHT) { 
      int temp = points[i].x; 
      points[i].x = -1 * points[i].y; 
      points[i].y = temp; 
     } 

    } 

    return points; 
} 
+0

Diese andere Frage ist ähnlich (aber kein Duplikat) und könnte hilfreich sein: http://stackoverflow.com/questions/484573/image-rotation-algorithm –

Antwort

2

Die T-förmige Attacke, die Sie zeigen, wäre bei 45 Grad schwer zu drehen - Dinge übersetzen nicht wirklich von 90 bis 45.

 
original: 
..... 
.###. 
..#.. 
..o.. 

alternative A: 
..... 
.##.. 
.##.. 
...o. 

alternative B: 
..#.. 
.#... 
#.#.. 
...o. 

Es könnte leicht andere für dieses Muster geben.

Ich empfehle Ihnen, ein 45-Grad-Muster zu erstellen, das Ihrem 90-Grad-Muster entspricht, und dann das 45-Grad-Muster genau so zu drehen, wie Sie Ihre 90-Grad-Muster drehen.

+0

Ich bin gerade zu der gleichen Erkenntnis gekommen, beim Ausprobieren die Rotationsmathematik in den anderen Antworten. Ich muss mir eine "diagonale" Version der Muster einfallen lassen, die beide brauchen, danke für die Hilfe. – LoginError

0

sicher, Drehung gegen den Uhrzeigersinn in 2D (mit positiven x, y nach rechts oben zeigt) ist dies nur (rotation matrix in wikipedia sehen

)
[x'] [cos(theta) -sin(theta)] [x] 
[y'] = [sin(theta) cos(theta)] [y] 

für theta = 45 Grad wird dieser

x' = 0.7071*x - 0.7071*y 
y' = 0.7071*x + 0.7071*y 

(ersetzen 0,7071 mit sqrt (2)/2, ich benutze nur 4 Ziffern hier)