2013-12-22 55 views
2

我做一個簡單的跳線遊戲,並與碰撞有問題相撞。在項目中我有Player和Platform Class。玩家重寫shouldCollide(Fixture fixtureA,Fixture fixtureB)方法。我的問題是,如果有辦法獲得fixtureA和fixtureB是玩家與平臺碰撞?我在libgdx的github上讀取的演示,但項目有(超級彈跳)似乎isin't使用Box2D的,所以我很擔心我應該如何正確的做碰撞在我的項目很少consufed。LIBGDX發現哪個對象,其燈具

我現在shouldCollide現在看起來是這樣的:

@Override 
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) { 
    if(fixtureA == fixture || fixtureB == fixture){ 
     return body.getLinearVelocity().y< 0; 
    } 
    return false; 
} 

兩個固定裝置(A和B)與燈具相比較可以告訴我,如果玩家是「衝突製造者」(對不起,那之一,但我無法找到合適的單詞英語)只是因爲它在Player類中定義的類似方法。

我發現我可以在我的平臺類燈具中的字符串添加到用戶數據,然後在shoudCollide我只能拿到用戶數據,我不知道這樣做的好辦法。

回答

1

我發現我可以在我的平臺類燈具中的字符串添加到用戶數據,然後在shoudCollide我只能拿到用戶數據,我不知道這樣做的好辦法。

其實你可以在你的用戶數據中加入任何Object

如果你真的只有平臺和玩家,你可能會做一些像下面這樣。請注意,這只是一個快速演示,並不能涵蓋所有情況(如玩家與玩家的碰撞,或平臺與平臺的碰撞)。對於更復雜的場景,你可能不得不找到一個更通用的算法,它使用反射。

Player player = ...; 
playerFixture.setUserData(player); 

Platform platform = ...; 
platformFixture.setUserData(platform); 

... 

@Override 
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) { 
    if (fixtureA.getUserData() != null && fixtureB.getUserData() != null) { 
     Player player; 
     Platform platform; 
     if (fixtureA.getUserData() instanceof Player) { 
      player = fixtureA.getUserData(); 
      platform = fixtureB.getUserData(); 
     } else { 
      player = fixtureB.getUserData(); 
      platform = fixtureA.getUserData(); 
     } 

     // now you have full access to the player and the platform 
    } 

    return false; 
} 

對於碰撞過濾這可能是有點太過於強大,但只要你必須實現碰撞處理,你需要的,而不是僅僅Strings有真正的實體。