计算as3中舞台上特定类的实例数

时间:2012-08-10 17:25:41

标签: actionscript-3 class instance

是否有人知道如何获取当前在舞台上的特定类(在我的情况下是Ball.as)中的实例数。

注意:我想要一个解决方案,不包括使用numChildren然后循环遍历所有子节点,因为我想要每个enterFrame的Balls数量和循环,这可能只会让我的代码更重。

那么有什么建议吗?

3 个答案:

答案 0 :(得分:2)

a)算上他们

var balls:uint = 0;
for(var i:uint=0,l:uint = numChildren; i<l;i++)
  if(getChildAt(i) is Ball) balls++;

b)跟踪它们

var balls:uint = 0;

function addBall():DisplayObject {
   balls++;
   return addChild(new Ball());
}

function removeBall(ball:Ball):DisplayObject {
   balls--;
   return removeChild(ball);
}

c)隔离它们

var ballContainer:Sprite = new Sprite();
addChild(ballContainer);

...

ballContainer.addChild(new Ball());

var balls:uint = ballContainer.numChildren; 

答案 1 :(得分:2)

您可以在类中使用静态变量来跟踪,但这意味着您必须始终正确地跟踪此变量,否则最终可能会出现错误的计数。

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);

答案 2 :(得分:1)

我认为没有办法绕过这个循环。

当我有任何大小的Actionscript项目时,我将创建一个静态Manager类来处理所有应用程序范围的变量。你可以在那里创建一个数组,并在创建一个新的球实例时添加/删除它。