0

こんにちは、私はゲームを開発しています。配列によってステージに追加される 5 つのムービー クリップを追跡する配列があります。私は Player ムービー クリップも持っているので、Player ムービー クリップは、次のようにステージに追加された 5 つのダイヤモンド ムービー クリップすべてでヒット テストを行っています。

private var nPoints:Number = 5;..........

    public function addPointsToStage():void
    {            
         for (var i = 0; i < nPoints; i++)
         {
             trace(aPointsArray.length);
             points = new mcGainPoints();
             stage.addChild(points);
             points.x = startPoint.x + (xSpacing * i);
             points.y = startPoint.y - (ySpacing * i);
             aPointsArray.push(points);
         }

    }

プレーヤが 5 つのムービー クリップすべてに接触すると、すべて正常に動作し、配列の出力は次のようになります。
0 1 2 3 4

その後、次のレベルに進みます。

しかし、私の Player が 5 つのムービー クリップのいずれにもヒットしないか、2、3 しかヒットしないとします。次のレベルが開始されると、出力は次のようになります: 5 6 7 8 9

次のレベルが開始されると、ポイントがハイスコアに自動的に追加されるなど、奇妙なことが起こり始めます。

問題は、5 つのムービー クリップを正しく保持している配列を破棄していないことだと思います。これは、次のレベルを開始して配列を破棄するために使用するコードです。

if(player.hitTestObject(mcGoal_1))
           {

            //Remove all points from array/stage
            for (var i:int = 0; i < aPointsArray.length; i++)
            {

                if (aPointsArray[i].parent)
                {
                    parent.removeChild(aPointsArray[i]);
                }
                              startNextLevel();

            }

mcGoal_1 はゲームのオブジェクトであるため、プレイヤーが goal_1 をヒットすると、画面上のすべての配列オブジェクトが破壊され、次のレベルが開始されます。これは startnextlevel 関数です。

private function startNextLevel():void
    {

        //add points to next stage
        addPointsToStage();


    }

次のレベルが開始されたときに、配列が 01234 にリセットされない理由がわかりますか? それが、ゲームにランダムにポイントを追加するバグがある理由だと思います。どんな助けでも大歓迎です

4

3 に答える 3

0

配列から何かを削除しているようには見えません。

.indexOf()との組み合わせを使用して.splice()、配列から項目を削除できます。

function removeMc(clip:MovieClip):void
{
    if(clip.parent) clip.parent.removeChild(clip);

    // Also remove from array.
    var index:int = aPointsArray.indexOf(clip);
    aPointsArray.splice(index, 1);
}

次の場合は、単に配列を空にすることも価値がある場合がありますstartNextLevel()

private function startNextLevel():void
{
    aPointsArray.length = 0;

    //add points to next stage
    addPointsToStage();
}
于 2013-05-14T06:24:42.247 に答える
0

配列を null 値に割り当てるだけです。必要なときにいつでも配列が最初から開始されるようにします。次のコード コードがお役に立てば幸いです。

  var nPoints:Number = 5;
  var points:poin;
  var aPointsArray:Array;
   var startPoint:Number = 0;
  var xSpacing:Number = 20;  
    var ySpacing:Number = 20; 

    addPointsToStage();

  function addPointsToStage():void
    {        
    aPointsArray = null;
        aPointsArray = new Array();

         for (var i:int = 0; i < 6; i++)
         {
             trace(aPointsArray.length);
             points = new poin();
             addChild(points);
              points.x = 100+ (xSpacing * i);
             points.y = 200 - (ySpacing * i);
             aPointsArray.push(points);
         }
    }
于 2013-05-14T06:41:04.137 に答える