0

嘿伙计们,所以我正在开发一个游戏,我有一个数组来跟踪我的 5 个由数组添加到舞台的电影剪辑。我也有一个播放器影片剪辑,因此播放器影片剪辑正在使用所有 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

然后它继续到下一个级别。

但是假设我的播放器没有击中 5 个电影剪辑中的任何一个或只击中其中几个,当下一个级别开始时,输出如下所示: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
        //Remove all points from array/stage
        for (var i:int = 0; i < aPointsArray.length; i++)
            if (aPointsArray[i].parent)
                parent.removeChild(aPointsArray[i]);
        // just one statement, no braces
        aPointsArray.length=0; // clear the array itself, not just 
        // points from display list!
        startNextLevel(); // now start level

正确陈述的错误顺序会导致灾难。始终检查您的代码流,现在执行什么,然后执行什么,以及执行多少次。

于 2013-05-14T06:26:12.437 回答
0

只需将您的数组分配给空值。这样该数组将在您需要时从头开始。我希望以下代码对您有所帮助。

  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 回答