【问题标题】:Collision Detection in Libgdx without physical response没有物理响应的 Libgdx 中的碰撞检测
【发布时间】:2016-11-29 19:40:55
【问题描述】:

我在安卓上的游戏我想让我的玩家与一个无敌的物体发生碰撞。应该检测到这种碰撞,但它实际上不应该停止播放器。他应该只是能够“通过”。我确定这在 libgdx 中是可能的,但我无法让它工作。我用教程here

我只想使用触发器。使用btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE 设置标志确实有效,这意味着我的角色通过了,但我不知道它保存在哪里。那么我在哪里可以找到有这些信息的事件,有人知道吗?

【问题讨论】:

  • 那么你的问题是如何实现一个ContactListener?看看这个教程:xoppa.github.io/blog/…,一定要完整阅读。

标签: java android libgdx collision-detection bullet


【解决方案1】:

我在 android 上的游戏我想让我的玩家与一个无敌的 > 物体发生碰撞。应该检测到这种碰撞,但它实际上不应该停止 >player。

您需要的是一个自定义的 ContactListener 与它可以检测到的 Box2D 传感器主体 配对。您的播放器也将是一个 Box2D 身体。以 UserData 的形式(例如,一个简单的字符串)给你的两个身体标识符。然后,您可以在 ContactListener 中检查这些 UserData。

Fixture.setUserData(...)

您的 ContactListener 将实现 Box2D ContactListener 并覆盖其方法:

public class MyContactListener implements ContactListener{
@Override
public void beginContact(Contact contact) {
    Fixture fa = contact.getFixtureA();
    Fixture fb = contact.getFixtureB();
    if(fa == null || fb == null) return;
    // ...
}

@Override
public void endContact(Contact contact) {
    Fixture fa = contact.getFixtureA();
    Fixture fb = contact.getFixtureB();
    if(fa == null || fb == null) return;
    // ...
}

@Override
public void preSolve(Contact contact, Manifold oldManifold) {}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {}

}

Box2D 主体和传感器声明留给读者作为练习。

可以在此处找到 Box2D 的初学者教程: http://rotatingcanvas.com/using-box2d-in-libgdx-game-part-i/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多