当我转到另一个框架时如何保持计时器 运行 Actionscript 3.0
How to keep timer running when i go to the other frame Actionscript 3.0
我是 actionscript 的新手。
我想知道如何 运行 计时器 class 并保持 运行ning 即使我去其他帧。
例如。我在第 2 帧中 运行 计时器,当我转到第 1 帧时,计时器保持 运行ning,直到我回到第 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()
我想要的是,当我启动定时器并转到另一个帧时它仍然会 运行宁(滴答作响),当我回到定时器帧时我可以停止它。
如果您遇到此问题,您可能是在框架本身中键入了代码。写一个文件 class 并在里面创建你的计时器,所以无论哪一帧,所有的属性都还在,并且保持 运行.
首先,如果您要重新访问已发布代码所在的框架,您需要确保不会每次都重新创建计时器并导致内存泄漏。
更改以下行
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;
我是 actionscript 的新手。 我想知道如何 运行 计时器 class 并保持 运行ning 即使我去其他帧。 例如。我在第 2 帧中 运行 计时器,当我转到第 1 帧时,计时器保持 运行ning,直到我回到第 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()
我想要的是,当我启动定时器并转到另一个帧时它仍然会 运行宁(滴答作响),当我回到定时器帧时我可以停止它。
如果您遇到此问题,您可能是在框架本身中键入了代码。写一个文件 class 并在里面创建你的计时器,所以无论哪一帧,所有的属性都还在,并且保持 运行.
首先,如果您要重新访问已发布代码所在的框架,您需要确保不会每次都重新创建计时器并导致内存泄漏。
更改以下行
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;