Archive for May, 2007

解决 setInterval 和 clearInterval 脱僵状态的类

Saturday, May 26th, 2007

刚开始使用 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.     public function toString() : String{
  17.         return "[object interval]";
  18.     }
  19. }

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