2016-11-29 52 views
0

我在android上的遊戲我想讓我的玩家碰撞一個不可移動的對象。應該檢測到這種碰撞,但它不應該實際阻止玩家。他應該能夠「通過」。我確定這是libgdx中的possilbe,但我無法使它工作。我使用的教程hereLibgdx碰撞檢測沒有物理反應

我只是想使用觸發器。使用btCollisionObject.CollisionFlags.CF_NO_CONTACT_RESPONSE設置標誌確實有效,這意味着我的角色可以通過,但我不知道這是保存在哪裏。那麼我在哪裏可以找到具有此信息的事件,有誰知道?

+0

所以你的問題是如何實現ContactListener?查看本教程:https://xoppa.github.io/blog/using-the-libgdx-3d-physics-bullet-wrapper-part1/,請務必完整閱讀。 – Xoppa

回答

-1

我在android上的遊戲我想讓我的玩家碰到一個不可移動的>對象。應該檢測到這種碰撞,但它不應該實際停止>播放器。

你需要的是一個Box2D的傳感器主體,它可以檢測配對的定製ContactListener。您的播放器也將是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的初學者教程可以在這裏找到: http://rotatingcanvas.com/using-box2d-in-libgdx-game-part-i/