我有一个游戏,玩家向前移动(半)随机牌。当玩家击中某个牌时,我想要一个最佳测试。
然而,当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;')
请帮忙:(
答案 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");
}
}
}