【发布时间】:2012-06-01 17:23:10
【问题描述】:
我想让物品(动态物体)由于重力而与地板(静态物体)发生碰撞。但是我不希望玩家与地板上的物品发生碰撞,尽管我需要在玩家与物品重叠时进行回调(好像物品的 isSensor 属性设置为 true)。
有可能吗? 我尝试了一些使用类别位和掩码位的配置,但没有成功。
我之前没有遇到过这个问题,因为项目的重力刻度设置为 0,因此它们不会掉在地板上。但现在他们需要对重力做出反应。
谢谢。
【问题讨论】:
我想让物品(动态物体)由于重力而与地板(静态物体)发生碰撞。但是我不希望玩家与地板上的物品发生碰撞,尽管我需要在玩家与物品重叠时进行回调(好像物品的 isSensor 属性设置为 true)。
有可能吗? 我尝试了一些使用类别位和掩码位的配置,但没有成功。
我之前没有遇到过这个问题,因为项目的重力刻度设置为 0,因此它们不会掉在地板上。但现在他们需要对重力做出反应。
谢谢。
【问题讨论】:
您必须实现一个扩展b2ContactListener 的类。您可以在PreSolve() 虚函数中选择拒绝碰撞。在传递给 PreSolve() 的 b2Contact 对象中,您可以获得 2 个固定装置,如果您之前存储了指向用户数据的指针,您可以从中得出实际碰撞的内容。
在启动游戏引擎之前,创建b2ContactListener子类的新对象,然后调用游戏世界对象的SetContactListener()方法设置监听器。
【讨论】:
BeginContact 中所做的事情转移到PreSolve,因为我认为SetEnabled(false) 会阻止BeginContact 的调用。但我只需要禁用PreSolve中的联系方式,这很酷。