我需要在动作脚本中阻止两个相互碰撞的矩形。我的代码只在维度上有效(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上进行了搜索,并且没有发现阻止碰撞的任何有用的东西,但是我已经发现了很多关于测试它们的信息。
答案 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中。
从那里你可以使用逻辑来找出发生碰撞的位置,并使用交叉点的宽度和高度将一个矩形移动到另一个矩形。