AS3 2D矩形碰撞阻塞

时间:2013-05-05 16:39:13

标签: actionscript-3 block collision

我需要在动作脚本中阻止两个相互碰撞的矩形。我的代码只在维度上有效(X碰撞上只有X,Y上只有Y)。当我测试它是否在X轴和Y上碰撞时,它们会发生干扰。

function 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;
}

}

如果还有其他方法可以测试碰撞并阻止碰撞,那么请告诉我,但是我已经在谷歌和stackoverflow上进行了搜索,并且没有发现阻止碰撞的任何有用的东西,但是我已经发现了很多关于测试它们的信息。

3 个答案:

答案 0 :(得分:0)

第1步:获取Box2d。 第2步:谢谢:))

严肃地说,使用众所周知的高度优化的库。你可能有更多的机制来应对碰撞。

如果碰撞是你唯一想要的,那么我建议你使用hitTest。这样做的好处是你可以比较不规则的形状,而不仅仅是盒子。如果hitTest为true,您只需在每次移动对象时进行测试。如果是,则恢复到之前的状态,或者将它们放在另一个状态旁边。

此方法的另一个变体是为移动物体添加“光环”。如果光环hitTests目标对象,则停止。这样您就不必执行额外的步骤来重新定位对象。

希望我能清楚地表达自己,我半睡半醒:D

答案 1 :(得分:0)

hitTestObject适用于两个矩形对象:

if (obj1.hitTestObject(obj2))
{
    // handle collision
}

答案 2 :(得分:0)

如果是纯矩形碰撞,则可以使用交叉矩形方法。

var overlapRect:Rectangle = RECTANGLE1.intersection(RECTANGLE2);

这会将像这样的碰撞信息转储到overlapRect中。

enter image description here

从那里你可以使用逻辑来找出发生碰撞的位置,并使用交叉点的宽度和高度将一个矩形移动到另一个矩形。

enter image description here