Прикрепление мувиклипа по дорожке с вращением (через AS3) - PullRequest
2 голосов
/ 22 февраля 2012

Как я мог сделать:

Чтобы прикрепить видеоклип (например, «шаги»), вдоль пути (другой видеоклип).

Это будет в пределах интервала для прикрепления одного мувиклипа за раз.

Мне нужно вращение, то есть шаги должны вращаться в соответствии с направлением пути.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

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

и т. д.

Надеюсь, это поможет.

1 голос
/ 23 февраля 2012

Вы должны иметь свой путь как математическую функцию от t, как (x,y) = f(t). В этом случае достаточно просто переместить новый мувиклип на (x,y) и повернуть его, например, с помощью Math.atan2.

.

В вашем случае не ясно, что означает along a path (other movieclip). Например, это статическое или динамическое?

Хакерский способ сделать это, если вы получили статический путь, - это использовать пустой спрайт, который перебирается по этому пути, например, на 100 кадров. Таким образом, функция (x,y) = f(t) будет

mc.gotoAndStop(int((t-minTime)/(maxTime-minTime)));
var xToAddFootsteps:Number = mc.dummy.x;
var yToAddFootsteps:Number = mc.dummy.y;
var rotationOfFootsteps:Number = Math.atan2(xToAddFootsteps, yToAddFootsteps);

При условии, что мувиклип пути называется mc, а пустой спрайт внутри называется dummy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...