0

プロジェクトをAdobeFlashCS4でコンパイルするたびに、次のエラーメッセージが表示されます。

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at stageRotation/spawnParticle()
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

エラーを生成するコードを以下に示します。

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

任意の入力をいただければ幸いです。ありがとう。:)

4

2 に答える 2

2

removeChild渡された引数がメソッドを呼び出した親の子ではない場合、このエラーをスローします。thisパーティクルは、オブジェクト内の別のサブコンテナに子として追加されますか?

それが実際に呼び出し元の子であることを確認してください。

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent == this) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

パーティクルがthisオブジェクトの直接の子ではない場合は、次を使用してパーティクルを削除できます。

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent != null) {
        trace("particle at " + i + " " + particleArrayForward[i]);
        trace("parent is " + particleArrayForward[i].parent);
        particleArrayForward[i].parent.removeChild(particleArrayForward[i]);
    }
}
于 2010-07-27T07:00:17.723 に答える
1

配列内のすべてのパーティクルをループすることにより、表示オブジェクトから子を削除しています。ただし、配列自体の子への参照を削除する場所がわかりません。したがって、particleArrayFowardを再度ループすると、すでに削除されている表示オブジェクトを削除しようとしますが、これは発生していると思いますか?

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
        particleArrayForward[i]=null;//this will fix it but now the length of array will never shrink

    }
}

まだまだ良い:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}
particleArrayForward = new Array();
//or particleArrayForward.length = 0;

それ以外の場合、その配列を再度ループしない場合は、削除しようとしている表示オブジェクトの子ではない子を配列に追加しているところがあります。

于 2010-07-27T05:33:07.453 に答える