Как остановить анимацию на основе классов таймера AS3 в другом кадре? - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть проект, который состоит из 4 кадров (+ один начальный кадр), где каждый кадр содержит анимацию на основе класса Timer.

Вы можете посетить каждый кадр, выбрав соответствующую кнопку.

Допустим, анимация в кадре длится в общей сложности 30 секунд, но я слишком нетерпелив, чтобы посмотреть ее и принять решениеframe2, что тоже мне не нравится.В фоновом режиме, однако, анимация для frame1 все еще работает, потому что, когда я перехожу к кадру 2 и возвращаюсь к frame1, анимация начинается как с начала, так и продолжается с того места, где я остановился.

Я также получаю сообщение об ошибке:

TypeError: Error #1009: Kan geen eigenschap of methode benaderen via een verwijzing naar een object dat null is.
at fl.transitions::TransitionManager/saveContentAppearance()
at fl.transitions::TransitionManager/set content()
at fl.transitions::TransitionManager()
at MethodInfo-111()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

Есть ли решение моей проблемы?

Как остановить анимацию, когда я оставляю один кадр, чтобы при повторном его просмотре он начинался с начала, а не с половины?

Спасибо за чтение!

Вот мой код:

Кнопки массива

var knopArray:Array = new Array(knop1, knop2, knop3, knop4);

Функции массива

var functionArray:Array = new Array(naarFrame1, naarFrame2, naarFrame3, naarFrame4);


Подключение прослушивателей событий

for(var i:int = new int (0) ; i < knopArray.length; i++){
        knopArray[i].buttonMode = true;
        knopArray[i].addEventListener(MouseEvent.CLICK, klik)   
        function klik(event:MouseEvent):void{
            for(var i:int = new int (0) ; i < knopArray.length; i++)
                if (event.currentTarget == knopArray[i]){
                    knopArray[i].addFrameScript(0, functionArray[i]);
                    }
                }
        }

перейти к кадру и начать анимацию

function naarFrame1(){
        gotoAndStop("frame1");
        var timerEenA:Timer = new Timer(1000,1);
            //animations
        timerEenA.start();
        }

function naarFrame2(){
        gotoAndStop("frame2");
        var timerTweeA:Timer = new Timer(1000,1);
            //animations
        timerTweeA.start();
        }

1 Ответ

0 голосов
/ 15 декабря 2011

В вашем первом кадре, называемом «init» (или что-то в этом роде), который не имеет анимации:

var buttons:Array = [ button1, button2, button3, button4 ];
var frames:Array = [ "frame1", "frame2", "frame3", "frame4" ];

for each (var button:MovieClip in buttons)
{
    button.buttonMode = true;
    button.mouseEnabled = true;
    button.addEventListener(MouseEvent.CLICK, clickListener);
}

function clickListener(event:MouseEvent):void
{
    for (var i:int = 0; i < buttons.length; i++)
    {
        if (event.target == buttons[i])
            gotoAndStop(frames[i]);
    }
}

В вашем втором кадре, называемом «frame1»:

// This will give you a 20 second animation, with 1 second updates.
var timer1:Timer = new Timer(1000, 20);
timer1.addEventListener(TimerEvent.TIMER, timer1Listener);
timer1.start();

function timer1Listener(event:TimerEvent):void
{
    // do something
}

В вашем третьем кадре, называемом "frame2":

// This will also give you a 20 second animation, with 100ms updates.
var timer2:Timer = new Timer(100, 200);
timer2.addEventListener(TimerEvent.TIMER, timer2Listener);
timer2.start();

function timer2Listener(event:TimerEvent):void
{
    // do something
}

И т. Д. ... Это можно сделать более аккуратно, используя объекты, но это должно достичь желаемого эффекта.

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