2004/10/20 | [技巧]清理setInterval
类别(Flash) | 评论(13) | 阅读(245) | 发表于 14:50
setInterval很不错,可以完全代替onEnterFrame,但是使用起来却有很多需要注意的地方

比如要用updateAfterEvent,强制刷屏
还有要记得用clearInterval(id);来停止掉setInterval,如果要在停止的地方忘记地址了,那是很恐怖的^^"

但是要当程序一大,到处都是setInterval的时候(当然这样的程序也不好),你会为了找setInterval的id在哪里..而忙呼

注意过id的人都知道id是一个number,在你调用setInterval的时候会返回一个number,而这个number会逐加,很像addListener中的_listener数组的length

那么一个停掉所有setInterval的笨办法
MAX = 1000;
for(var i=0;i<MAX;i++){
clearInterval(i);
}

定义一个足够大的数字,然后慢慢clear,这么做就可以停止掉所有的setInterval了,当然如果你使用了超过1000个不同的setInterval(- -||)那还会出掉问题

所以最好的办法
var tmpID:Number = setInterval(function(){},10);
while(--tmpID > 0)
clearInterval(tmpID);

先用setInterval建立一个空函数,这样tmpID就会得到一个目前所拥有的setInterval的个数,然后用while循环一次性搞定就可以了^^"
简单吧,这样,你在哪里用过setInterval都不要紧,因为我想flash内置的setInterval函数,一定有一个类似addListener中的_listener的数组,然后返回数组的长度


那么强化一下clearAll()方法
function clearAll(Void):Void {
	
	// others clear statement
	
	var tmpId:Number = setInterval(function () {}, 10);
	while (--tmpId>0)	clearInterval(tmpId);
}


////////////////////////////////////////////////
// 测试程序
function A(){trace("A");}
function B(){trace("B");}
function C(){trace("C");}
setInterval(A,50);
setInterval(B,50);
setInterval(C,50);

setInterval(clearAll,1000);

function clearAll(Void):Void {
	var tmpId:Number = setInterval(function () {}, 10);
	while (--tmpId>0)	clearInterval(tmpId);
}
0

评论Comments

日志分类
首页[76]
Say[10]
Flash[31]
PHP[3]
XML[2]
Cool[12]
Weapon[10]
Other[8]