【问题标题】:libgdx - How to disable collisionslibgdx - 如何禁用冲突
【发布时间】:2015-12-28 09:20:46
【问题描述】:

所以我正在尝试制作单向墙,这意味着我的演员只能通过将这个对象扔到一侧(例如只能从底部或上部)。 我开始阅读本教程:one-way-walls 但是当我在检查演员的方向后尝试禁用碰撞时,它不起作用。 我认为我的问题可以通过这部分来解决

由于我们将使用每次碰撞仅发生一次的 BeginContact 事件,因此我们只能使用 SetEnabled 一次来改变接触的行为。问题是联系人将在每一步后恢复为启用状态。我们可以记下我们禁用了哪些联系人,然后每次在 PreSolve 中检查他们的列表,但这有点效率低下,而且比我今天可以打扰的工作要多。或者实际上的任何一天:) 因此,我们将悄悄潜入 b2Contact.cpp 并注释掉 Update 函数开头的行,该函数重新启用联系人。完成后,它应如下所示: // 重新启用此联系人。 //m_flags |= e_enabledFlag;

问题是我在 AndroidStudio 中使用的是 java 版本的 libgdx,我不知道如何查找和更改这段代码。 所以我需要一种改变它的方法,或者一种不同的解决方案来避免这种碰撞状态在每个循环中“重新启用”。

【问题讨论】:

    标签: java android-studio libgdx box2d collision


    【解决方案1】:

    您可以在preSolve 中解决此问题,并将状态(是否应启用联系人)存储在装置userData 中。当然你应该在endContact 中恢复这个标志。

    【讨论】:

    • beginContact 和 endContact 的问题是每个联系人只调用一次 tey。因此,如果您的演员接触墙壁半小时,您只会收到一个 beginContact 调用。而 PreSolve 在每一步都会被调用。
    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多