2011-12-02 1 views
0

Я программирую флеш-игру, я создал массив точек (позиции x и y), которым должны следовать некоторые мувиклипы. Эти мувиклипы имеют определенную скорость (сейчас они делают шаги 5 пикселей). Когда я хочу переместить их по горизонтали или по вертикали, все в порядке, я должен добавить или удалить 5 пикселей этих клипов «x» или «y». Но иногда они должны двигаться по диагонали, и теперь это сложно.AS3: движение по диагонали

Что я делаю:

var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x) * 180/Math.PI; 
var xstep:Number = Math.cos(angle) * this.speed; 
var ystep:Number = Math.sqrt(Math.pow(this.speed, 2) - Math.pow(xstep, 2)); 

this.x += xstep; 
this.y += ystep; 

Это лишь часть кода, но я думаю, что это все, что вам нужно. В основном, это делает мой мувиклип сделать небольшой шаг (из этого.speed (в настоящее время установлен 5) пикселей).

Если текущая точка и следующая точка имеют одинаковую позицию y, она работает нормально. Когда они этого не делают, это не сработает. Сначала угол справа, но он медленно уменьшается (хотя он должен оставаться неизменным). Я не знаю, является ли это угол, который не вычисляется правильно или если это шаги x и y, но это один из тех, я уверен.

ответ

2

Попробуйте вместо этого:

var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x); 
var xstep:Number = Math.cos(angle) * this.speed; 
var ystep:Number = Math.sin(angle) * this.speed; 

Поскольку cos работает на углы в радианах , вам не нужно конвертировать в градусы. Вычисление y-составляющей угла использует sin, поэтому оно должно быть аналогично x. Я не могу проверить это, но возможно, что ystep будет назад и может потребоваться умножить на -1.

+0

Сначала я использовал теорему пифагора для ystep, но мне нравится ваш путь лучше. Сейчас это работает, мне нужно только не превращать радианы в градусы. Спасибо, я запомню это, ха-ха. –

 Смежные вопросы

  • Нет связанных вопросов^_^