我正在使用Flash Pro cc制作游戏。(ActionScript3)但是我想知道aTile会发生什么,它是通过循环动态声明的MovieClip变量。每个aTile都会得到2个EventListener。
for(var i:Number = 0; I< pVector.length; i ++){
var aTile:ATile=new ATile();
aTile.x=pVector[i].x;
aTile.y=pVector[i].y;
aTile.gotoAndStop(Math.ceil(Math.random()*Color));
nVector.push(aTile);
Spr.addChild(aTile);
aTile.addEventListener(MouseEvent.CLICK,Clicked,false,0,true);
aTile.addEventListener(Event.COMPLETE, stop,false,0,true);
}
//当前函数在此结束。 aTile现在会发生什么?它会被垃圾收集吗?顺便说一下,只要玩家开始我的游戏新级别,这段代码就会运行。而且我没有在其他函数中使用aTile变量。我只使用nVector变量。 并且在循环中声明动态变量是否意味着创建了多个动态变量?例如,如果我将这段代码循环5次以上,是否意味着创建了5个aTile变量?或者每次声明var aTile时:ATile = new ATile();再次,它是否用'new'aTile替换'旧'aTile,因此在循环后只存在1 aTile ????
答案 0 :(得分:1)
ActionScript是JavaScript的衍生产品。在这两种语言中,所有变量声明都被提升到包含函数的顶部,并且可以在整个函数中访问,无论它们在哪个块范围内被声明。
当程序无法再访问对象的所有引用时,将回收内存。由于您要将aTile添加到nVector和Sprite,它只会在函数返回后回收,nVector超出范围,并且Spr超出范围并从舞台中删除。