【问题标题】:Collision Detection in Libgdx without physical response没有物理响应的 Libgdx 中的碰撞检测
【发布时间】:2016-11-29 19:40:55
【问题描述】:
我在安卓上的游戏我想让我的玩家与一个无敌的物体发生碰撞。应该检测到这种碰撞,但它实际上不应该停止播放器。他应该只是能够“通过”。我确定这在 libgdx 中是可能的,但我无法让它工作。我用教程here
我只想使用触发器。使用btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE 设置标志确实有效,这意味着我的角色通过了,但我不知道它保存在哪里。那么我在哪里可以找到有这些信息的事件,有人知道吗?
【问题讨论】:
标签:
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/