2012-03-16 8 views
0

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

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; 
} 

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

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

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

Благодаря

ответ

0

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

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

3) Обязательно используйте соответствующие градусы/радианы, где это необходимо.

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

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

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

+0

Я изо всех сил стараюсь следовать этому. Я действительно новичок в AS3, и его трудно обойти ваши инструкции. –

+0

Не беспокойтесь. Сначала вычислите вектор направления от башни к аватару. НаправлениеVector = PlayerPosition - TurretPosition. Обе позиции должны находиться в одном и том же пространстве (несколько объясняется здесь http://www.actionscriptmoron.com/?p=1062). Я предполагаю, что одним из источников проблемы может быть то, что один (или оба) клипа являются дочерними клипами других клипов. Это не означает, что файл аватара_movieclip.x не является надежным, поскольку он может относиться к родительскому клипу клипа аватара (если он есть). Обязательно используйте абсолютные позиции, если оба клипа не являются прямыми дочерними элементами одного и того же родительского клипа. –

0

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

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

Возможно, это должно быть 'Math.atan2 (enTarget.y - barrel.y, enTarget.x - barrel.x)' –

+0

Да! Ты прав! – Eugeny89

+0

Все еще работает неправильно. Я забыл упомянуть, что мой player.x всегда является центральным для сцены, и что сцена (включая турель) перемещается влево/вправо. Хотя мой игрок и движется. –