0

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

函数碰撞测试(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;
}

}

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

4

3 回答 3

0

hitTestObject适用于两个矩形对象:

if (obj1.hitTestObject(obj2))
{
    // handle collision
}
于 2013-05-05T17:17:07.460 回答
0

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

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

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

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

希望我能清楚地表达自己,我睡着了:D

于 2013-05-05T16:46:26.953 回答
0

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

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

这会将像这样的碰撞信息转储到重叠矩形中。

在此处输入图像描述

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

在此处输入图像描述

于 2014-02-23T19:13:38.750 回答