如何在另一帧中停止基于AS3计时器类的动画?

时间:2011-12-14 11:17:55

标签: actionscript-3 timer

我有一个由4帧(+一个起始帧)组成的项目,其中每个帧包含一个基于Timer类的动画。

您可以通过选择适当的按钮访问每个框架。

假设frame1中的动画总共持续30秒,但是我太急于观看它并决定转到frame2,这也是我不喜欢的。然而,在后台,frame1的动画仍在运行,因为当我转到第2帧并返回到第1帧时,动画从头开始,并从我离开的地方继续播放。

我也收到错误:

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


联系eventlisteners

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 :(得分:0)

在你的第一帧,称为“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
}

等...这可以使用对象更干净地完成,但这应该达到你想要的效果。