AS3二维矩形碰撞阻塞
问题描述:
我需要阻止在Action Script中彼此碰撞的两个矩形。代码我只能在二维情况下工作(只有X对X碰撞或Y对Y)。当我测试它是否在X轴和Y上发生碰撞时,它们会相互干扰。AS3二维矩形碰撞阻塞
功能collisionTest(OBJ1,OBJ2) {
var b1 = getBound(obj1);
var b2 = getBound(obj2);
if(((b1.x < b2.x + b2.width) && (b1.x + b1.width > b2.x)) && ((b1.y + b1.height > b2.y) && (b1.y < b2.y + b2.height)))
{
if(b1.x + b1.width > b2.x + b2.width)
obj1.x = b2.x + b2.width;
else if(b1.x < b2.x)
obj1.x = b2.x - obj1.width;
else if(b1.y < b2.y)
obj1.y = b2.y - obj1.height;
else if(b1.y + b1.height > b2.y + b2.height)
obj1.y = b2.y + b2.height;
}
}
如果有任何其他方式来测试碰撞并阻止它,那么请告诉我,但我已经搜查在谷歌和*,并没有发现任何有用的阻止冲突,但我已经找到了很多关于他们的测试。
答
第1步:获取Box2d。 第2步:谢谢:)
严格来说,使用众所周知的高度优化的库。碰撞可能会有更多机制。
如果碰撞是你想要的唯一的东西,那么我会建议你使用hitTest。这样做的好处是你可以比较不规则的形状,而不仅仅是盒子。如果hitTest为真,您只需测试每次物体移动。如果是,那么你回到以前的状态,或者把它们放在另一个旁边。
此方法的另一个变体是为您的移动物体添加“光环”。如果光环击中目标对象,则停止。这样您就不必执行额外的步骤来重新定位对象。
希望我表达清楚我自己,我半睡半醒:d
答
hitTestObject
作品就好了两个矩形对象:
if (obj1.hitTestObject(obj2))
{
// handle collision
}
答
如果是纯矩形碰撞,您可以使用交叉矩形法。
var overlapRect:Rectangle = RECTANGLE1.intersection(RECTANGLE2);
这会将像这样的碰撞信息转储到overlapRect中。
从那里可以使用逻辑来找出碰撞正在发生,并使用交叉点的宽度和高度移动矩形中的一个远离另一个。