0

特定のオブジェクトに対して、このエラーが時々発生します。何らかの理由で、この問題は、このオブジェクトを 1 つではなく 2 つスポーンしたときに開始されるようです。基本的に、コインを落とす敵がいて、1 人の敵が 2 をドロップします。それらを同時に拾うと、このエラーが発生し始めます。

public function removeCoin(){
        removeEventListener(Event.ENTER_FRAME, moveCoin);
        if(this.parent){
            this.parent.removeChild(this);
        }
        parentMC.level.spawnedCoins.splice(this, 1);
}

これは、プレイヤーとコインが衝突したときに、衝突チェックによって呼び出される関数です。この問題は通常、この機能で一度に 2 枚のコインを拾ったときに始まります。

var dropCoin:Number = Math.random() * 100;
    if(dropCoin > 40){
        var newCoin1:coin = new coin(parentMC);
        var newCoin2:coin = new coin(parentMC);
        newCoin1.x = x+7;
        newCoin1.y = y;
        parentMC.level.levelObjects.addChild(newCoin1);
        parentMC.level.spawnedCoins.push(newCoin1);
        newCoin2.x = x-7;
        newCoin2.y = y;
        parentMC.level.levelObjects.addChild(newCoin2);
        parentMC.level.spawnedCoins.push(newCoin2);
     }

コードを編集しました。

4

2 に答える 2

1

このエラーは、(removechild を呼び出して) 表示リストから削除しようとしている項目が表示リストにないか、removeChild を呼び出したオブジェクトの子ではないことを意味します。

すべてのコードを分析しなくても、簡単なチェックで問題を解決できる可能性があります。

既存のコードのチャンクを変更します:

if(this != null){
   parentMC.lvl1.levelObjects.removeChild(this);
}

これに:

if(this.parent){
 this.parent.removeChild(this);
}

これは、「this」に親があるかどうかをチェックし、ある場合は親から自分自身を削除します。

于 2012-07-26T21:43:54.137 に答える
0

あなたの問題は次のようになると思います:
parentMC.level.spawnedCoins.splice(this, 1);

spawnedCoins が単なる配列の場合、splice は 2 つの整数引数 startIndex および deleteCount を受け取る必要があります。関連する Adob​​e ヘルプ ページ

オブジェクトを渡すことで、オブジェクトが int、値 '1' (つまり、null ではない) にキャストされていると思います。

代わりに、parentMC.level.spawnedCoins.splice(parentMC.level.spawnedCoin.indexOf(this), 1); が必要だと思います。

于 2012-07-30T14:34:47.377 に答える