Я работаю над игрой сотового телефона в стиле рогейлей, которая работает на сетке. Атаки/предметы в этой игре действуют путем таргетинга плиток по шаблону относительно пользователя. Paturn, как правило, по отношению к направлению пользователь стремится в а, например, в этом screenshot шаблонj2me - Поверните массив из 2d точек с шагом 45 градусов
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);
это показывают относительно временного противника (желтая коробка) с целью «вверх».
В настоящее время у меня есть простой код для поворота массива шаблонов на 90 градусов, как видно here. Мой вопрос: есть ли простой способ повернуть массив из 2d точек на 45 градусов, позволяя моим атакам/предметам стрелять по диагонали, предпочтительно без использования математики с плавающей запятой, поскольку она имеет тенденцию работать медленно на многих телефонах (или поэтому я слышу). Это, наверное, тривиальный вопрос для всех, кто знаком с графическим программированием, но меня поразило случай кода-блока.
Текущий код поворота показан ниже. Теперь я понимаю, что лучший способ сделать это - взять угол вместо «направления» и повернуть точки на этот угол (отклоняя углы, которые не кратно 45, конечно).
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;
}
Этот вопрос аналогичен (но не дублируется) и может быть вам полезен: http://stackoverflow.com/questions/484573/image-rotation-algorithm –