解决 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();