hitTestObject没有使用所有MovieClip来测试

时间:2013-04-13 04:33:34

标签: arrays actionscript-3 for-loop hittest

嘿,有点麻烦的人可能比我想做的更容易。 但我遇到的问题是,当我使用我的mcPlayer测试我的mcPoints时,它只与5个影片剪辑中的4个进行交互,这些影片剪辑是通过for循环添加到舞台上的。

过去两天我一直在努力解决这个问题,似乎无法确定问题所在,一切看起来都很完美,但也许你可以提供帮助。

这些是我的变量:

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以启动的循环:

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”没有被交互,任何想法为什么?请一切都有用。非常感谢!

1 个答案:

答案 0 :(得分:0)

我不确定你的代码是做什么的。但是当您从循环中的数组中删除元素时,您将丢失一个项目。

你的数组是 [1][2][3][4][5] 当i = 1时,你删除元素并得到 [1][3][4][5] 下一次交互i = 2,这意味着你再也不会测试值3。

每当从数组中删除元素时,都应该减少i。