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中。

enter image description here

从那里可以使用逻辑来找出碰撞正在发生,并使用交叉点的宽度和高度移动矩形中的一个远离另一个。

enter image description here