Je travaille sur un jeu de téléphone portable de style roguelike fonctionnant sur une grille. Les attaques/éléments de ce jeu opèrent en ciblant les tuiles selon un modèle relatif à l'utilisateur. Le paturn est généralement par rapport à la direction que l'utilisateur vise en tant que bien, par exemple dans ce screenshot le modèlej2me - Faire pivoter la matrice de points 2D par incréments de 45 degrés
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);
est de montrer par rapport à un ennemi temporaire (la boîte jaune) visant « up ».
J'ai actuellement un code simple pour faire pivoter un tableau de modèles par incréments de 90 degrés, comme vu here. Ma question est, Y at-il un moyen facile de faire pivoter un tableau de 2 points par incréments de 45 degrés, permettant à mes attaques/éléments de tirer sur la diagonale, de préférence sans utiliser de calcul en virgule flottante, car il tend à fonctionner lentement sur de nombreux téléphones donc j'entends). Ceci est probablement une question triviale pour quiconque est familier avec la programmation graphique, mais j'ai été frappé par un cas de blocage du codeur.
Mon code de rotation actuel est illustré ci-dessous. Je réalise maintenant qu'une meilleure façon de le faire serait de prendre un angle au lieu d'une "direction" et de faire tourner les points de cet angle (en rejetant des angles qui ne sont pas des multiples de 45 bien sûr).
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;
}
Cette autre question est similaire (mais pas un doublon) et pourrait être utile: http://stackoverflow.com/questions/484573/image-rotation-algorithm –