1.Создайте массив координат - это ваш путь.Существует несколько способов создания массива, но результат должен выглядеть примерно так:
var path:Array = [
Point(0, 0),
Point(20, 12),
Point(60, 72),
Point(67, 118)
];
2.Настройте функцию nextStep()
или аналогичную - она будет собирать информацию о следующем шаге на пути, например, угол между ним и вашим текущим шагом.Вам также необходимо отслеживать текущий шаг, который можно представить, просто сохранив индекс того, где вы находитесь, в массиве путей.В целом, это может выглядеть так:
var currentStep:int = 0;
function nextStep():Object
{
// Object to return.
var out:Object = {
hasDestination: false,
destination: null,
radians: 0
};
var current:Point = path[currentStep];
// Check that you're not on the last step first.
if(currentStep != path.length - 1)
{
currentStep ++;
var next:Point = path[currentStep + 1];
var t:Point = next.subtract(current);
out.nextDestination = true;
out.destination = next;
out.radians = Math.atan2(t.y, t.x);
}
return out;
}
3.Используйте приведенную выше информацию для перемещения - объект, возвращаемый из nextStep()
, можно использовать для изменения положения и поворота DisplayObject
по вашему выбору.
Предполагая, что entity
является вашим DisplayObject
:
var stepInfo:Object = nextStep();
if(stepInfo.hasDestination)
{
entity.rotation = stepInfo.radians * 180 / Math.PI;
entity.x = stepInfo.destination.x;
entity.y = stepInfo.destination.y;
}
else trace("End of path reached.");
4.Приведите в порядок (необязательно) - рассмотрите возможность создания собственного класса как результат nextStep()
для аккуратности, например:
public class StepInfo
{
public var hasDestination:Boolean = false;
public var destination:Point;
public var radians:Number = 0;
}
Я бы даже предложил перенести все вышеперечисленное в Path
класс, так что вы можете просто делать такие вещи, как:
var path:Path = new Path();
path.generate(); // create this yourself, generates the path array.
var step:StepInfo = path.nextStep();
trace(path.currentStep);
и т. д.
Надеюсь, это поможет.