刚开始使用 setInterval 和 clearInterval 的时候,总是会被脱僵状态困扰。就是说,明明有时候将 intervalID给清理掉了,原来定义的间隔还是不停的执行着,具体的内容可以看aw同学的分析,讲的非常清晰了。于是为了避免出现未预期的程序问题,通常只好使用onEnterFrame来替代。
不过在单纯继承于Object,仅仅处理逻辑的类中,没有MovieClip来充当onEnterFrame的载体,为了创建interval还是要用到 setInterval 方法才行(除非你传一个MovieClip对象进来当holder)。于是参照分析中interval进出栈的做法,封装成一个Interval 类,使用起来就万无一失了。
- class Interval {
- private var intervals : Array;
- private var interval : Number;
- public function Interval(obj : Object, func : String, time : Number) {
- intervals = new Array();
- interval = setInterval(obj, func, time);
- intervals.push(interval);
- }
- public function clearIntervals() : Void {
- for (var i in intervals) {
- clearInterval(intervals[i]);
- intervals.pop();
- }
- clearInterval(interval);
- }
- public function toString() : String{
- return "[object interval]";
- }
- }
调用:var x:Interval = new Interval(owner, “doSth”,500);
清除:x.clearIntervals();