Flash - SideScroller Turret Math - PullRequest
       7

Flash - SideScroller Turret Math

0 голосов
/ 16 марта 2012

Я работаю на боковой скроллере, а для врага я делаю турель. Я пытаюсь нацелить турель на игрока, но, похоже, не могу понять это правильно. Ниже приведен примерный набросок того, чего я хочу достичь:

enter image description here

Я хочу, чтобы ствол (темно-синий) нацеливался / поворачивался так, чтобы указывать на игрока.

Я загрузил видео YouTube о моей сцене:

http://www.youtube.com/watch?v=eeP47VoX9uA&feature=youtu.be

Это то, что у меня есть (цикл):

function enterFrameHandler(e : Event) : void{
   _turretBarrel.rotation = Math.atan2(enTarget.x, enTarget.y) * 180/Math.PI;
}

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

Мой enTarget.x всегда занимает центральное место на сцене, и сцена (включая башню) перемещается вокруг игрока влево и вправо (x) ... Перемещается только enTarget.y (прыжок / высокая платформа).

Я немного новичок во Flash и ActionScript. Если бы кто-нибудь мог мне помочь или указать мне правильное направление, это было бы здорово.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

1) Убедитесь, что вы получили правильные числа и положение аватара и башни в одном и том же координатном пространстве.Простой след каждого из них подойдет.В этом случае вам, вероятно, понадобится мировая (относительно сцены) позиция обоих клипов.Убедитесь, что они имеют смысл по сравнению с верхним левым углом экрана (0, 0).

2) Помните, что _turretBarrel.rotation - это вращение в диапазоне от -180 до 180, поэтому его необходимо учитыватьучитывайте при расчете углов.

3) Убедитесь, что вы используете соответствующие градусы / радианы.

4) принудительно сфокусируйтесь на аватаре, запустите игру и посмотрите, выглядят ли границы хорошо.Затем сделайте то же самое с турелью.

Еще одна полезная вещь для целей отладки - это установка некоторой отладочной графики.т. е. нарисуйте линию того, что, по вашему мнению, является вектором направления для проверки ваших чисел и расчетов.

С другой стороны: это то, чем является большинство программ;Отладка.Ничего, кроме неопровержимых фактов, получите свои цифры из отладчика (возможно, быстрее) или проследите вывод.Если вы все еще используете ужасную профессиональную флешку IDE.Я действительно рекомендовал бы получить один с надлежащим отладчиком, таким как FlashDevelop (бесплатно) или Flash Builder (коммерческий)

0 голосов
/ 16 марта 2012

Оливер, похоже, вы вычисляете тангенс неправильного угла (между игроком и осью X). Вам нужно что-то вроде следующего:

function enterFrameHandler(e : Event) : void{
   _turretBarrel.rotation = Math.atan2(enTarget.x - barrel.x, enTarget.y - barrel.y) * 180/Math.PI;
}
...