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;
}
Diese andere Frage ist ähnlich (aber kein Duplikat) und könnte hilfreich sein: http://stackoverflow.com/questions/484573/image-rotation-algorithm –