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