我在Android上的游戏我想让我的玩家与一个无敌物体发生碰撞。应该检测到这种碰撞,但它实际上不应该停止玩家。他应该能够“经历”。我确信这可能在libgdx中,但我不能让它工作。我使用了教程here
我只想使用触发器。使用btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE
设置标志确实有效,这意味着我的角色会通过,但我不知道保存它的位置。那么我在哪里可以找到有这些信息的活动,有谁知道呢?
答案 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