【问题标题】:How to make items collide with the floor but not with the player?如何使物品与地板碰撞但不与玩家碰撞?
【发布时间】:2012-06-01 17:23:10
【问题描述】:

我想让物品(动态物体)由于重力而与地板(静态物体)发生碰撞。但是我不希望玩家与地板上的物品发生碰撞,尽管我需要在玩家与物品重叠时进行回调(好像物品的 isSensor 属性设置为 true)。

有可能吗? 我尝试了一些使用类别位和掩码位的配置,但没有成功。

我之前没有遇到过这个问题,因为项目的重力刻度设置为 0,因此它们不会掉在地板上。但现在他们需要对重力做出反应。

谢谢。

【问题讨论】:

    标签: box2d collision-detection


    【解决方案1】:

    您必须实现一个扩展b2ContactListener 的类。您可以在PreSolve() 虚函数中选择拒绝碰撞。在传递给 PreSolve()b2Contact 对象中,您可以获得 2 个固定装置,如果您之前存储了指向用户数据的指针,您可以从中得出实际碰撞的内容。

    在启动游戏引擎之前,创建b2ContactListener子类的新对象,然后调用游戏世界对象的SetContactListener()方法设置监听器。

    Sample code

    【讨论】:

    • 它有效!我首先认为我应该将我在BeginContact 中所做的事情转移到PreSolve,因为我认为SetEnabled(false) 会阻止BeginContact 的调用。但我只需要禁用PreSolve中的联系方式,这很酷。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多