0

我有一个MovieClip导出到 ActionScript 的名为smallGainPoints. 我想要做的是MovieClip在舞台上以线性或对角线路径创建多个实例。完成此操作后,我希望hitTestObject在 Points 数组和播放器之间进行。这些点被添加到我希望它们成为的阶段,但 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();

因此,积分被添加到舞台上,但 hittest 不起作用。请帮忙!

4

1 回答 1

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对象,从屏幕中心开始向右移动。

于 2013-04-10T06:14:37.843 回答