AS3: диагональное движение - PullRequest
0 голосов
/ 02 декабря 2011

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

Что я делаю:

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, но я уверен, что это один из них.

1 Ответ

2 голосов
/ 02 декабря 2011

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

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.

...