【发布时间】:2012-08-10 17:25:41
【问题描述】:
有人知道如何获取当前舞台上特定类(在我的情况下为 Ball.as)的实例数吗?
注意:我想要一个不包括使用 numChildren 然后循环遍历所有子级的解决方案,因为我想要每个 enterFrame 的 Balls 的数量,这样循环可能只会让我的代码更重。
有什么建议吗?
【问题讨论】:
标签: actionscript-3 class instance
有人知道如何获取当前舞台上特定类(在我的情况下为 Ball.as)的实例数吗?
注意:我想要一个不包括使用 numChildren 然后循环遍历所有子级的解决方案,因为我想要每个 enterFrame 的 Balls 的数量,这样循环可能只会让我的代码更重。
有什么建议吗?
【问题讨论】:
标签: actionscript-3 class instance
您可以在类中使用静态变量来跟踪,但这意味着您必须始终正确跟踪该变量,否则可能会导致计数错误。
public static var count:int = 0;
public Ball() {
addEventListener(Event.ADDED, onAdded);
addEventListener(Event.REMOVED, onRemoved);
}
private function onAdded(event:Event):void {
removeEventListener(Event.ADDED, onAddeed);
Ball.count++;
}
private function onRemoved(event:Event):void{
removeEventListener(Event.REMOVED, onRemoved);
Ball.count--;
}
然后在您想计算它们时:
trace(Ball.count);
【讨论】:
var balls:uint = 0;
for(var i:uint=0,l:uint = numChildren; i<l;i++)
if(getChildAt(i) is Ball) balls++;
var balls:uint = 0;
function addBall():DisplayObject {
balls++;
return addChild(new Ball());
}
function removeBall(ball:Ball):DisplayObject {
balls--;
return removeChild(ball);
}
var ballContainer:Sprite = new Sprite();
addChild(ballContainer);
...
ballContainer.addChild(new Ball());
var balls:uint = ballContainer.numChildren;
【讨论】:
我认为没有办法绕过循环。
当我有一个任意大小的 Actionscript 项目时,我将创建一个静态管理器类来处理所有应用程序范围的变量。您可以在其中创建一个数组,并在创建新的球实例时从中添加/删除。
【讨论】: