对象不移动时如何检测碰撞?

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

如果我有一个body.setType(BodyType.STATIC)body.setType(BodyType.STATIC)body.setType(BodyType.STATIC) ),并且其旁边的另一个球爆炸(一个动力球然后设置为一个更大的静态球),则不会检测到碰撞。

我能做些什么来检测静态物体的碰撞? 我的意思是,他们没有移动,所以他们不应该碰撞,但你有一个静态对象,然后,下一刻,你有另一个静态对象触摸它,所以不应该算什么?

让我知道你是否需要更多的澄清。

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


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

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

第二种可能性是让你的'冰冻'的身体是一个运动的形状,而不是一个静态的形状。 他们仍然应该检测碰撞,并且具有能够在不与其他物理对象发生反应的同时具有用户设置速度的优势。 但是,我不完全确定运动形状是否与静态物体产生接触点。


在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
}

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

链接地址: http://www.djcxy.com/p/66161.html

上一篇: How Can I Detect Collisions When Objects Aren't Moving?

下一篇: Slowing down objects in box2d with no gravity