HitTest多个带有数组的MovieClips

时间:2013-04-10 04:08:47

标签: actionscript-3 hittest

我将MovieClip导出到名为smallGainPoints的ActionScript。我想要做的是在舞台上以线性或对角线路径创建此MovieClip的多个实例。完成此操作后,我希望在Points数组和播放器之间发生hitTestObject。积分被添加到我希望它们的阶段,但HitTest不会启动。

以下是我如何设置功能:

此函数添加在我的Gameloop中,该函数从onEnterFrame处理程序调用:

private function checkPlayerHitPoints():void 
{
    for (var j:int = 0; j < aPointsArray.length; j++)
    {
        //get current points in j loop
        var currentPoints:smallGainPoints = aPointsArray[j];

        //test if player is hitting current point
        if (player.hitTestObject(currentPoints))
        {
            //remove point on stage
            currentPoints.destroyPoints()
            //remove point from array
            aPointsArray.splice(j, 1);

            nScore += 5;
            updateHighScore();
        }
    }
}

我不确定我是否做得对,但我想在一行中添加点的多个实例,以便玩家可以收集尽可能多的积分。所以我创建了一个函数并设置了位置,然后在我的构造函数中添加了函数addPointsToStage(),因此它不会循环每一帧。

private function addPointsToStage():void
{
    for (var i = 0; i < nPoints; i++)
    {
        points = new smallGainPoints();
        stage.addChild(points);
        points.x = (stage.stageWidth / 2);
        points.y = (stage.stageHeight / 2);

        points = new smallGainPoints();
        stage.addChild(points);
        points.x = (stage.stageWidth / 2) + 200;
        points.y = (stage.stageHeight / 2);
    }

这是我启动数组的方式:

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

然后在我的构造函数中添加了:

aPointsArray = new Array();

所以积分被添加到舞台上但是最热门的不起作用。请帮忙!

1 个答案:

答案 0 :(得分:1)

addPointsToStage方法中,您永远不会将smallGainPoints对象添加到数组中。

这一行之后:

points = new smallGainPoints();

将新点对象推送到aPointsArray数组:

aPointsArray.push(points);

修改

连续添加积分的更好方法可能是这样的:

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

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

for loop会从屏幕中心开始向右添加一堆smallGainPoint个对象。