Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 使用阵列测试多个电影剪辑_Actionscript 3_Hittest - Fatal编程技术网

Actionscript 3 使用阵列测试多个电影剪辑

Actionscript 3 使用阵列测试多个电影剪辑,actionscript-3,hittest,Actionscript 3,Hittest,我有一个MovieClip导出到名为smallGainPoints的ActionScript。我想做的是在舞台上以线性或对角路径创建此MovieClip的多个实例。完成此操作后,我希望在点数阵列和玩家之间进行一次hitTestObject。积分会被添加到我想要的阶段,但是命中测试不会启动 下面是我如何设置函数的: 此函数添加到my Gameloop中,my Gameloop由OneInterFrame处理程序调用: private function checkPlayerHitPoints():

我有一个
MovieClip
导出到名为
smallGainPoints
的ActionScript。我想做的是在舞台上以线性或对角路径创建此
MovieClip
的多个实例。完成此操作后,我希望在点数阵列和玩家之间进行一次
hitTestObject
。积分会被添加到我想要的阶段,但是命中测试不会启动

下面是我如何设置函数的:

此函数添加到my Gameloop中,my Gameloop由OneInterFrame处理程序调用:

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();
        }
    }
}
以下是我启动阵列的方式:

public var points:smallGainPoints;
    private var nPoints:Number = 5;
    private var aPointsArray:Array;
然后在我的构造函数中添加:

aPointsArray = new Array();

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

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;
    }
}
私有函数addPointsToStage():void
{
var起始点:点=新点(stage.stageWidth/2,stage.stageHeight/2);
变量间距:数值=50;
对于(变量i=0;i

for loop
将在一行中添加一组
smallGainPoint
对象,从屏幕中心开始向右移动。

首先在hitTest行之前放置一个跟踪。找出
播放器
当前点
的位置。然后看看您是否得到了预期的值。还可以尝试在hitTest if语句中添加跟踪。你可能会发现它实际上正在被呼叫。非常感谢亚当。推挤似乎起了作用。我追踪了这些点,所有2个都在舞台上追踪,似乎每帧25帧/秒。我唯一的问题是,球员只是用其中一个点而不是两个点进行击球测试。不用担心。您需要将两个点推送到阵列上。如果你发现了一个你认为正确的答案,那么记得把它标记为正确答案。是的,有些奇怪的事情正在发生。当我追踪时(aPointsArray.length);在addPointsToStage()中;for循环中的函数得到2,4,但是当我移除第二个aPointsArray.push(点)时;在for循环中,只留下一个,我得到1,2,我认为这是正确的,对吗?我一定是做错了什么,因为当它们碰撞时,它会跟踪我的命中测试,但它只会破坏1,有时它不会破坏任何一个。我不太清楚为什么你要在每个循环中添加两个点。你把所有的分数都加在同一个位置上。哦,我想我是想得太多了。我加了两品脱,因为我想你必须这样做才能在舞台上排队。我想在舞台上一条线上拿下5分,然后球员射出一个球来争取所有的分数,所以我想我需要让他们的位置像这样。并添加新的点,但这就是为什么我有循环哈哈。
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;
    }
}