проблемы вращения при стрельбе - PullRequest
0 голосов
/ 05 сентября 2011

У меня большая проблема, когда я пытаюсь вращать свои снаряды вместе с вращением корабля.

Я хочу, чтобы мой космический корабль сделал два выстрела одновременно. Поэтому я использовал свой первый набор снарядов и разместил их с правой стороны корабля (один выстрел слева и один справа). Пока все хорошо.

Но когда я стреляю своим космическим кораблем и поворачиваюсь, вращение снарядов выглядит очень странно. Трудно описать это, вот изображение, которое показывает ошибку в действии.

http://imageshack.us/photo/my-images/841/projectilebug.jpg

У меня огромные проблемы при вращении снарядов ДОЛЖНО с космическим кораблем, чтобы он выглядел действительно хорошо. В настоящее время есть только один выстрел. Моя стрельба облажается, когда я поворачиваюсь и стреляю одновременно. Цель состоит в том, чтобы создать двойную пушку, как показано на рисунке.

Вот некоторый код, который размещает снаряд слева от корабля (который на самом деле не работает):

var projectileRadians:Number = (player.frame / 180) * 3.14159;

tempProjectile.x = (player.point.x + 6) + Math.cos(projectileRadians);
tempProjectile.y = (player.point.y + 3) + Math.sin(projectileRadians);

Код скорости:

tempProjectile.nextX = tempProjectile.x;
tempProjectile.nextY = tempProjectile.y;
tempProjectile.dx = rotationVectorList[player.frame].x;
tempProjectile.dy = rotationVectorList[player.frame].y;

Это обновляет позицию:

nextX += (dx * (speed + Math.abs(xAdjust))) * step;
nextY += (dy * (speed + Math.abs(yAdjust))) * step;

1 Ответ

1 голос
/ 05 сентября 2011

Код скорости выглядит нормально. Похоже, вы не правильно рассчитали положение пистолета.

Редактировать: мы не используем стандартную систему отсчета; вместо этого мы используем тот, где угол = 0 означает вверх, а углы увеличиваются при вращении по часовой стрелке. Поэтому мы берем стандартное использование и меняем местами sin и cos .

Здесь gx и gy означают координаты оружия относительно координат, вокруг которых движется корабль. Нам нужно повернуть вектор на угол, прежде чем добавить его к координатам корабля:

cs = Math.cos(projectileRadians);
sn = Math.sin(projectileRadians);
tempProjectile.x = player.point.x + gx * sn - gy * cs;
tempProjectile.y = player.point.y + gx * cs + gy * sn;

Было бы хорошей оптимизацией ограничить угол наклона корабля определенными значениями (возможно, каждые 5 градусов) и заблаговременно поместить все триггерные функции в таблицу. Функции триггера очень дороги для вычисления.

Обратите внимание, что это также предполагает, что положительный Y "вверх". Компьютерная графика часто начинается с (0, 0) в верхнем левом углу и увеличивается по мере Y при движении вниз, поэтому вам, возможно, придется поменять знак Y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...