【发布时间】:2015-03-27 21:18:04
【问题描述】:
我正在使用 LibGdx 库的 Box2D 扩展开发一款游戏,除了碰撞检测之外,一切都正常运行。
这是它目前的样子:Image
这个想法是玩家(小圆圈)可以在他的范围内跳跃(重力设置为朝向地面的中心)以躲避围绕地面旋转的传入障碍物。一旦障碍物到达消除器,ContactListener 应该调用一个方法来销毁障碍物。
首先,我有几个不同的身体:
- 播放器(动态机身)
玩家只受重力和一些作用力的影响(无变换) - 地面(运动体)
地面只有一个线性速度(这就是它不是静态物体的原因) - 障碍物(运动体)
使用 setTransform(position, angle) 方法移动障碍物 - Despawner(静态体)
我还使用位过滤器来管理冲突(我已经检查了三次,并不是问题的根源)。
实际的问题是,当 Obstacle Body 是碰撞的一部分时,我的 ContactListener 不会调用 beginContact() 方法,除非他与 Player Body 发生碰撞。所有其他物体相互碰撞都很好。
感谢您的帮助!
【问题讨论】:
-
您很可能搞砸了您的位过滤器。发布所有相关代码。问题在于
setTransform()方法 100% 不是,因此 sn-p 是无用的(更不用说让那些可能有类似问题的人感到困惑)。 -
这里是我的位过滤器: 对于障碍物:
fdef.filter.categoryBits = BIT_OBSTACLE; fdef.filter.maskBits = BIT_DESPAWNER | BIT_PLAYER;对于despawner:fdef.filter.categoryBits = BIT_DESPAWNER; fdef.filter.maskBits = BIT_OBSTACLE;对于玩家:fdef.filter.categoryBits = BIT_PLAYER; fdef.filter.maskBits = BIT_GROUND | BIT_OBSTACLE;fdef 是 FixtureDef
标签: java libgdx box2d collision