hitTestObject 如何对多个对象起作用?

How can hitTestObject work for many objects?

我有一款游戏,玩家在(半)随机方块上向前移动。当玩家击中某个方块时,我想要一个 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);

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

请帮忙:(

一个变量只能引用一个值。所以你的 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");
        }
    }
}