hitTestObject如何适用于许多对象?

时间:2015-06-20 14:12:43

标签: actionscript-3 hittest

我有一个游戏,玩家向前移动(半)随机牌。当玩家击中某个牌时,我想要一个最佳测试。

然而,当char击中floor2中产生的一个时,没有任何事情发生。

我认为这是因为舞台上有多个'floor2'影片剪辑?

当我跟踪floor2的界限“getBounds”时,它所显示的位置总是随着所有这些而改变为Hitest?

function handleCollision( e:Event ):void {      
if(char.hitTestObject(floor2)){
trace("hit detected");
}

这就是玩家产生的方式:

var char:Char = new Char();
char.x = 275;
char.y = 786;
cam.addChild(char);

这就是floor2产生的方式:

if (randomRounded > 10 && randomRounded <= 50 ){
floor2 = new Floor2();
floor2.x = -8.45;
floor2.y = 786 - tileCounter;
cam.addChildAt(floor2, stage.numChildren-1);

额外:( RandomRounded是一个随机生成的数字),(有一个'Var floor2:Floor2;')

请帮忙:(

1 个答案:

答案 0 :(得分:1)

变量最多只能引用一个值。因此,您的floor2变量只能引用一个Floor2对象。如果指定新值,则变量将引用该值。

你应该做的是使用Array,它可以容纳许多物体。

var floors:Array = [];

if (randomRounded > 10 && randomRounded <= 50 ){
    floor2 = new Floor2();
    floor2.x = -8.45;
    floor2.y = 786 - tileCounter;
    cam.addChildAt(floor2, stage.numChildren-1);
    floors.push(floor2); // add the reference to the array, now floor2 can safely be overwritten by a new value without losing the previous one
}

在函数handleCollision中,您将迭代数组以测试每个单独的楼层对象。这是一个快速未经测试的示例,说明了它的外观:

function handleCollision( e:Event ):void 
{ 
    for (var i:uint = 0; i< floors.length; ++i)
    {     
        if(char.hitTestObject(floors[i]))
        {
            trace("hit detected");
        }
    }
}
相关问题