Libgdx中没有物理响应的碰撞检测

时间:2016-11-29 19:40:56

标签: java android libgdx collision-detection bullet

我在Android上的游戏我想让我的玩家与一个无敌物体发生碰撞。应该检测到这种碰撞,但它实际上不应该停止玩家。他应该能够“经历”。我确信这可能在libgdx中,但我不能让它工作。我使用了教程here

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

1 个答案:

答案 0 :(得分:0)

  

我在Android上的游戏我想让我的玩家与一个不可见的>对象发生冲突。应该检测到这种碰撞,但它实际上不应该停止>播放器。

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

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的初学者教程: detailed answer

相关问题