物体不移动时如何检测碰撞?

时间:2012-02-17 02:05:08

标签: game-physics jbox2d collision

我想要理解这个问题,我必须解释这个游戏。球落在屏幕上,当你点击球时,它会根据球的类型变成另一个球。例如,点击一个球会将周围的球冻结一段时间。有些人会爆炸并摧毁附近的其他人。

如果我有一个冰球(body.setType(BodyType.STATIC)),并且它旁边的另一个球爆炸(动能球然后设置为更大的静球),则不会发现碰撞。

如何检测静态物体的碰撞?我的意思是,是的,他们没有移动,所以他们不应该碰撞,但你有一个静态物体,然后,下一刻,你有另一个静态物体接触它,所以不应该算什么东西?

如果您需要更多说明,请与我们联系。

更新:我有一个可能有效的想法,但它需要做一些我无法弄清楚的事情。如何让动态的身体像静态身体一样?我的意思是,一个动态的身体位置不受重力或碰撞的影响?

3 个答案:

答案 0 :(得分:0)

所以我认为有两种方法可以做到这一点(虽然没有测试):

首先是传感器。如果向“冻结”静态物体添加传感器,传感器仍应检测与其他静态物体的碰撞,即使物体本身是静止的。

第二种可能性是让你的“冰冻”身体成为运动形状而不是静态形状。它们仍然应该检测到碰撞,并且具有能够具有用户设定的速度而不会从其他物理对象做出反应的优点。但是,我不完全确定运动学形状是否与静态物体产生接触点。

答案 1 :(得分:0)

在API中进行了一些挖掘之后,我终于找到了帮助我的方法。下面是修复问题的代码。

//Find the two types of bodies in question
if (AABB.testOverlap(ballA.getBody().m_fixtureList.m_aabb, ballB.getBody().m_fixtureList.m_aabb))
{
    //Add new contact to collisionListener
}

答案 2 :(得分:-1)

IIUC,你可以认为爆炸球具有更大的半径(相当于受爆炸影响的区域),然后受影响的周围球将是那些与更大的圆形区域相交的球。