解决 setInterval 和 clearInterval 脱僵状态的类

刚开始使用 setInterval 和 clearInterval 的时候,总是会被脱僵状态困扰。就是说,明明有时候将 intervalID给清理掉了,原来定义的间隔还是不停的执行着,具体的内容可以看aw的分析,讲的非常清晰了。于是为了避免出现未预期的程序问题,通常只好使用onEnterFrame来替代。
不过在单纯继承于Object,仅仅处理逻辑的类中,没有MovieClip来充当onEnterFrame的载体,为了创建interval还是要用到 setInterval 方法才行(除非你传一个MovieClip对象进来当holder)。于是参照分析中interval进出栈的做法,封装成一个Interval 类,使用起来就万无一失了。


1 class Interval {
2     private var
intervals : Array;
3     private var
interval : Number;
4     public function
Interval(obj : Object, func : String, time : Number) {
5         intervals = new
Array();
6         interval =
setInterval(obj, func, time);
7
        intervals.push(interval);
8
    }
9     public function
clearIntervals() : Void {
10         for (var i in
  intervals) {
11
            clearInterval(intervals[i]);
12
            intervals.pop();
13
        }
14
        clearInterval(interval);
15
    }
16 }

调用:var x:Interval = new Interval(owner, "doSth",500);
清除:x.clearIntervals();

posted on 2007-03-26 14:40  rison  阅读(890)  评论(0编辑  收藏  举报

导航