Запись движений в Adobe Flash CS5 - PullRequest
1 голос
/ 01 марта 2012

Может кто-нибудь помочь с записью движений при перетаскивании объекта, и когда объект уронят, событие записи остановится и записанное движение будет анимировано кнопкой Play.

1 Ответ

1 голос
/ 01 марта 2012

Настройка массива, в котором будет храниться записанная информация:

var recording:Array = [];

Настройка метода, который будет добавлять информацию в этот массив:

function record(target:MovieClip):void
{
    recording.push(new Point(target.x, target.y));
}

Сделайте это, когда начнете перетаскиватьобъект:

recording.length = 0;

addEventListener(Event.ENTER_FRAME, _record);
function _record(e:Event):void
{
    record(yourObject);
}

Сделайте это, когда вы перестанете перетаскивать ваш объект:

removeEventListener(Event.ENTER_FRAME, _record);

Сделайте это, когда вы нажмете на воспроизведение:

recording.reverse();

addEventListener(Event.ENTER_FRAME, _playRecording);
function _playRecording(e:Event):void
{
    var step:Point = recording.pop();

    yourObject.x = step.x;
    yourObject.y = step.y;

    if(recording.length < 1)
        removeEventListener(Event.ENTER_FRAME, _playRecording);
}

Сохранение вашегозаписанные данные для последующего использования:

Вы можете использовать этот метод для преобразования массива recording в строку:

function collapse(data:Array):String
{
    var joined:Array = [];

    for each(var point:Point in data)
    {
        joined.push(Math.round(point.x) + ":" + Math.round(point.y));
    }

    return joined.join("$");
}

, которая в итоге будет выглядеть примерно так:

trace(collapse(recording)); // 48:47$29:19$4:26$20:35$1:48$3:16$12:24$27:30$0:24$19:48

Затем вы сможете использовать это для создания массива recording:

function expand(data:String):Array
{
    var out:Array = [];
    var base:Array = data.split("$");

    for each(var fragment:String in base)
    {
        var coords:Array = fragment.split(":");
        var point:Point = new Point(coords[0], coords[1]);

        out.push(point);
    }

    return out;
}

, который работает так:

var previousData:String = "48:47$29:19$4:26$20:35$1:48$3:16$12:24$27:30$0:24$19:48";
var recording:Array = expand(previousData);

trace(recording); // (x=48, y=47),(x=29, y=19),(x=4, y=26),(x=20, y=35),(x=1, y=48),(x=3, y=16),(x=12, y=24),(x=27, y=30),(x=0, y=24),(x=19, y=48)
...