1

現在ステージ上にある特定のクラス (私の場合は Ball.as) のインスタンス数を取得する方法を知っている人はいますか?

注: numChildren の使用を含めずにすべての子をループするソリューションが必要です。これは、enterFrame ごとにボールの数が必要であり、そのようにループするとコードがより重くなる可能性があるためです。

提案はありますか?

4

3 に答える 3

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);
于 2012-08-10T17:51:31.687 に答える
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; 
于 2012-08-10T17:49:50.960 に答える
1

ループを回避する方法はないと思います。

任意のサイズの Actionscript プロジェクトがある場合、アプリ全体のすべての変数を処理する静的な Manager クラスを作成します。そこに配列を作成し、ボールの新しいインスタンスが作成されたときにそこから追加/削除できます。

于 2012-08-10T17:32:25.867 に答える