数组未在游戏中重置

时间:2013-05-14 06:13:40

标签: arrays actionscript-3

嘿伙计们,所以我正在开发一个游戏,我有一个数组,可以跟踪我的5个影片剪辑,这些剪辑是由阵列添加到舞台上的。我有一个播放器影片剪辑,所以播放器影片剪辑是Hittesting,所有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个影片剪辑中的任何一个,或只触及其中几个,当下一个级别启动时,输出如下所示: 五 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吗?我认为这就是为什么游戏有随机添加点的错误。如有任何帮助,将不胜感激

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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

正确陈述的错误顺序会导致灾难。始终检查您的代码流程,现在执行的内容以及执行的内容以及执行的次数。

答案 2 :(得分: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);
         }
    }