当我转到其他框架Actionscript 3.0时如何保持计时器运行

时间:2017-09-02 10:52:40

标签: actionscript-3

我是动作脚本的新手。 我想知道如何运行计时器类并继续运行,即使我去其他框架。 例如。我在第2帧运行计时器,当我进入第1帧计时器继续运行,直到我回到第2帧停止计时器。 我很感激帮助。

更新: 我尝试使用这些代码制作秒表:

var sec,min,hr:uint = 0;
sec_txt.text = min_txt.text = hr_txt.text = "00";
var timerStopWatch:Timer = new Timer(1000);
timerStopWatch.addEventListener(TimerEvent.TIMER, timerHandler);
function timerHandler(e:TimerEvent){
    var sec:String = String(uint(timerStopWatch.currentCount%60));
    var min:String = String(uint((timerStopWatch.currentCount/60)%60));
    var hr:String = String(uint((timerStopWatch.currentCount/60)/60));

    sec_txt.text = (uint(sec)< 10) ? "0" + sec:sec;
    min_txt.text = (uint(min)< 10) ? "0" + min:min;
    hr_txt.text = (uint(hr) < 10) ? "0" + hr:hr;
}

当我启动计时器时,它可以工作,但当我转到第二帧时,它会停止并显示输出错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

    at Stopwatch_fla::MainTimeline/timerHandler()
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

我想要的是,当我启动计时器并转到另一帧时,它仍然会运行(滴答作响),当我回到计时器帧时,我可以阻止它。

2 个答案:

答案 0 :(得分:0)

如果您遇到此问题,可能是在框架中输入代码。写一个文档类并在那里创建你的计时器,所以无论哪个框架,所有属性仍然存在并继续运行。

答案 1 :(得分:0)

首先,如果您要重新访问已发布代码所在的帧,您需要确保每次都不会重新创建计时器并导致内存泄漏。

更改以下行

var timerStopWatch:Timer = new Timer(1000);

这两行:

var timerStopWatch:Timer;
if(!timerStopWatch) timerStopWatch = new Timer(1000);

这将确保您的计时器仅创建一次。该事件监听器会将计时器保留在内存中,因此如果您不断创建新计时器并向其添加监听器,它们将全部保留在内存中,您的应用程序将变得越来越慢。

其次,请确保自己清理干净。

当你想要你的计时器消失时,停止它,删除事件监听器并使引用为空:

timerStopWatch.stop();
timerStopWatch.removeEventListener(TimerEvent.TIMER, timerHandler);
timerStopWatch = null;

第三,如果您希望此对象跨越多个帧,则事件处理程序中引用的任何内容都需要在这些帧中保留。

这意味着:

sec_txt
min_txt
hr_txt

所有必须存在于运行此计时器的任何帧上。确保在那些框架上正确设置了实例名称。

或者,在使用之前检查它们是否存在:

if(sec_txt) sec_txt.text = (uint(sec)< 10) ? "0" + sec:sec;