Я программирую флеш-игру, я создал массив точек (позиции 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, но это один из тех, я уверен.
Сначала я использовал теорему пифагора для ystep, но мне нравится ваш путь лучше. Сейчас это работает, мне нужно только не превращать радианы в градусы. Спасибо, я запомню это, ха-ха. –