Libgdx 无物理响应的碰撞检测
Collision Detection in Libgdx without physical response
我的游戏在 android 我想让我的玩家与一个无敌物体相撞。这种碰撞应该被检测到,但它实际上不应该阻止玩家。他应该可以"go through"。我确定这在 libgdx 中是可能的,但我无法让它工作。我用了教程here
我只想使用触发器。使用 btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE
设置标志确实有效,这意味着我的角色通过了,但我不知道它保存在哪里。那么哪里可以找到有这个信息的Event,有人知道吗?
I my game on android I would like to let my player collide with an invinsible >object. This collision should be detected, but it shouldnt actually stop the >player.
您需要的是一个自定义的 ContactListener 与它可以检测到的 Box2D 传感器 body 配对。您的播放器也将是 Box2D body。以 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 body 和传感器声明留作 reader 的练习。
可在此处找到 Box2D 的初学者教程:
http://rotatingcanvas.com/using-box2d-in-libgdx-game-part-i/
我的游戏在 android 我想让我的玩家与一个无敌物体相撞。这种碰撞应该被检测到,但它实际上不应该阻止玩家。他应该可以"go through"。我确定这在 libgdx 中是可能的,但我无法让它工作。我用了教程here
我只想使用触发器。使用 btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE
设置标志确实有效,这意味着我的角色通过了,但我不知道它保存在哪里。那么哪里可以找到有这个信息的Event,有人知道吗?
I my game on android I would like to let my player collide with an invinsible >object. This collision should be detected, but it shouldnt actually stop the >player.
您需要的是一个自定义的 ContactListener 与它可以检测到的 Box2D 传感器 body 配对。您的播放器也将是 Box2D body。以 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 body 和传感器声明留作 reader 的练习。
可在此处找到 Box2D 的初学者教程: http://rotatingcanvas.com/using-box2d-in-libgdx-game-part-i/