0

私は ActionScript を初めて使用します。

私がやろうとしているのは、このようなスプライトオブジェクトにビットマップを追加することです-

testSprite.addChild(myBitmap);

これは何度も呼び出され、毎回myBitmapが異なる bitmapData を持つ場合があります。ここまでは問題なく動作します。次に、スプ​​ライトに追加されるたびにグローバル配列にmyBitmapを格納しようとします。

BitmapArray.push(myBitmap);

別の関数で、これらすべてのビットマップを削除したいのですが、このようにしています-

for each(var currentBitmap:Bitmap in BitmapArray)
{
   testSprite.removeChild(currentBitmap);
}

ただし、このエラーが発生しています-

指定された DisplayObject は呼び出し元の子でなければなりません

私がここで何をしているのか誰にも教えてもらえますか?

4

3 に答える 3

2

currentBitmapエラーは、削除しようとしているものがその時点でtestSprite含まれていないという事実を指しますtestSprite

これ以上コードを表示しない場合、これはいくつかの原因で発生する可能性があります。

  • ビットマップはコンテナーに追加されませんでした
  • ビットマップは に追加されましたが、その後別のコンテナに追加され、プロセスtestSpriteから削除されましたtestSprite
  • にビットマップを複数回追加しましたBitmapArray。つまり、for eachループ内でビットマップを削除しようとする試みが複数回行われました (最初の 1 つだけが成功します)。

簡単な修正の 1 つは、次のように、ループ内の各反復currentBitmapの前に が の子であることを確認することです。testSprite

for each(var currentBitmap:Bitmap in BitmapArray)
{
    if (testSprite.contains(currentBitmap))
    {
        testSprite.removeChild(currentBitmap);
    }
}

BitmapArrayこれで問題は回避されるはずですが、 のすべてのメンバーが の子であると予想している場合は、ソースで問題を解決しようとすると、その後の作業が容易になる可能性がありますtestSprite

于 2013-08-29T09:08:11.733 に答える
0

あなたが言ったように、myBitmap を BitmapArray に複数回追加することができます。したがって、ループで子を削除するときは、myBitmap がインデックス 0 とインデックス 1 に表示されると想定します。myBitmap をインデックス 0 で削除し、インデックス 1 で削除しようとすると、エラーが発生します。もう。

testSprite  = [myBitmap, myBitmap].

したがって、2つの解決策があります

初め

BitmapArray にアイテムを追加するときは、indexOf 関数で BitmapArray にアイテムが存在するかどうかを確認します。

BitmapArray.indexOf(item)

2番

testSprite から子を削除するときは、testSprite に子が含まれているかどうかを確認します

if (testSprite.contains(currentBitmap)) {
    testSprite.removeChild(currentBitmap);
}
于 2013-08-29T09:13:05.963 に答える