[技巧]清理setInterval

      Flash 2004-10-20 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);
}
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}