現在ステージ上にある特定のクラス (私の場合は Ball.as) のインスタンス数を取得する方法を知っている人はいますか?
注: numChildren の使用を含めずにすべての子をループするソリューションが必要です。これは、enterFrame ごとにボールの数が必要であり、そのようにループするとコードがより重くなる可能性があるためです。
提案はありますか?
現在ステージ上にある特定のクラス (私の場合は Ball.as) のインスタンス数を取得する方法を知っている人はいますか?
注: numChildren の使用を含めずにすべての子をループするソリューションが必要です。これは、enterFrame ごとにボールの数が必要であり、そのようにループするとコードがより重くなる可能性があるためです。
提案はありますか?
クラス内で静的変数を使用して追跡することができますが、これは、この変数を常に正しく追跡する必要があることを意味します。そうしないと、間違ったカウントになる可能性があります。
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 プロジェクトがある場合、アプリ全体のすべての変数を処理する静的な Manager クラスを作成します。そこに配列を作成し、ボールの新しいインスタンスが作成されたときにそこから追加/削除できます。