引数エラー#2025:
提供されたDisplayObjectは呼び出し元の子ではありません
私のプログラムでは、画面上の敵ユニットを表す表示オブジェクトの構造が次のように配置されています。
0: "enemy handler" ➔ [object EnemyHandler]
0: "enemy" ➔ [object Enemy1]
0: "enemy's skin"(MovieClip) ➔ [object EnemySkin1]
0: "skin image" ➔ [object Shape]
ドキュメントクラスには、EnemyHandlerの1つのインスタンスが含まれ、 Enemy1、Enemy2などの複数のインスタンスが含まれます。これらの各インスタンスには、スキンMovieClipがアタッチされています。
Enemyクラス(Enemy1 / 2/3 ectが継承する)には、Enemyが特定のポイントに到達したときに、Enemyクラス(enemy.update)内からtrueに設定されたexpiredプロパティが含まれています。
敵のハンドラークラスには関数があり、問題が発生する場所であり、すべてのEnememy表示オブジェクトの配列をループし、そこで位置を更新してから、
if(tempEnemy.expired)
{
tempEnemy.destroy(); // removeChild(skin)
enemyList.splice(tempEnemy);
removeChild(tempEnemy)
}
実行時に、すべての敵が作成された順序でエンドポイントに到達した場合、問題はありませんが、たとえば1つがより速く移動し、前にエンドポイントに到達した場合、エラー#2025(提供されたDisplayObjectは呼び出し元の子ではありません)がスローされます。
私はそれを、私が識別できない理由で、プログラムが敵を2回除去しようとするという事実に絞り込みました。ループして目的の敵を削除し、配列からスプライスされている場合でも、再度削除を試みます(これは正しく行われ、removeChildの最初の試行は常に成功します)
それはおそらく私に代わってかなり単純なことなので、私を許してください、しかしどんな助けでもありがたいです。これがファイルです。
[フレームのコード]pastebin.com/vcXzQpr9
[Enemy.as] pastbin.com/RNXgK8Ex
[EnemyHandler.as] pastbin.com/6fytxbMW
[Enemy0.as]&[Enemy1.as] pastbin.com/5bW3Aa0H
[Utils.as] pastbin.com/PQ2LPV0v
[traceDl.as]{ディスプレイリストのデバッグ}pastebin.com/9vQGKcYP