0

少し問題を抱えている皆さん、これは私が思っているよりも簡単かもしれません。しかし、私が抱えている問題は、mcPlayer で mcPoints をヒットテストすると、for ループによってステージに追加されたムービー クリップの 5 つのうち 4 つとしかやり取りしないことです。

私は過去 2 日間これに苦労しており、問題を特定することはできません。すべてが完全にセットアップされているようですが、おそらくあなたが助けることができます.

これらは私の変数です:

public var mcPoints:smallGainPoints;
    private var nPoints:Number = 5;
    private var aPointsArray:Array;

ステージに追加する 5 つの mcPoints ムービー クリップを設定する方法は次のとおりです。

private function addPointsToStage():void
    {
         var startPoint:Point = new Point((stage.stageWidth / 2) - 100, stage.stageHeight / 2);
         var spacing:Number = 50;

         for (var i = 0; i < nPoints; i++)
         {
             trace(aPointsArray.length);
             mcPoints = new smallGainPoints();
             aPointsArray.push(mcPoints);
             stage.addChild(mcPoints);
             mcPoints.x = startPoint.x + (spacing * i);
             mcPoints.y = startPoint.y;
         }

    }

これで、水平方向に整列された 5 つのポイントのムービー クリップがステージに追加されます。

最後に、HitTestObject が Initiate するのをリッスンするループを次に示します。

private function checkPlayerHitPoints():void 
    {

        for (var i:int = 0; i < aPointsArray.length; i++)
            {
                //get current point in i loop
                var currentPoints:smallGainPoints = aPointsArray[i];

                //test if  player is hitting current point
                if(player.hitTestObject(currentPoints))
                {
                    //Add points sound effects
                    var pointsSound:Sound = new pointsPickUpSound();
                    pointsSound.play();

                    //remove point on stage
                    currentPoints.destroyPoints()
                    //remove points from array
                    aPointsArray.splice(i, 1);
                    trace(aPointsArray.length);

                    //Add plus 5 text to current points position
                    mcPlus5 = new plusFiveText();
                    stage.addChild(mcPlus5);
                    mcPlus5.x = (currentPoints.x);
                    mcPlus5.y = (currentPoints.y);

                    //Update high score text
                    nScore += 5;
                    updateHighScore();


                }

            }
    }

したがって、ムービー クリップが追加されたときと、ここでヒットしたときの両方のトレースを追加したのは、次の値です。

0 1 2 3 4 ヒット: 4 ヒット: 3 ヒット: 2 ヒット: 1

また、addPointsToStage(); を呼び出します。詳細については、私のコンストラクターで。

したがって、取得している値から、最後の値「0」が相互作用していないように見えますが、その理由は何ですか? 何でもいいのでお願いします。本当にありがとう!

4

1 に答える 1

0

あなたのコードが何をしているのか正確にはわかりません。しかし、ループ内の配列から要素を削除すると、1 つのアイテムが失われます。

配列は [1][2][3][4][5] i=1 の場合、要素を削除して [1][3][4][5] 次の反復 i=2 を取得します。これは、値 3 に対してテストしないことを意味します。

配列から要素を削除するたびに i をデクリメントする必要があります。

于 2013-04-13T14:43:32.127 に答える