【问题标题】:Box2D not detecting collisionBox2D 未检测到碰撞
【发布时间】: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


【解决方案1】:

来自这里的手册:

http://www.box2d.org/manual.html#_Toc258082973

运动体不会与其他静态或运动体发生碰撞。

你必须想出一种新的方法来触发灭虫器。您将无法在两个动力学或一个动力学和一个静态体类型之间发生碰撞。可能是带有传感器固定装置的主体。或 Y 位置值。或关闭重力的动态物体。

游戏看起来很酷,期待。

【讨论】:

  • 确实有效!我使用了关闭重力的动态体。尽管如果我将其设置为传感器,则不会触发碰撞。幸运的是,我不需要将它设置为我的除虫器工作的传感器。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多