2015-06-14 18 views
0

我一直在嘗試使用box2D在LibGDX中設置環繞時出現問題,例如,我希望我的播放器在退出右側後出現在屏幕的左側,但不是在這裏工作是我的代碼:使用Box2D在libGDX中設置環繞效果

public void setWraparound(){ 
    //if player goes out of bounds vertically 
    if(body.getPosition().x < 0){ 
     body.setTransform(new Vector2(4.8f, body.getPosition().y),body.getAngle()); 
    }else if(body.getPosition().x > 4.8f){ 
     body.setTransform(new Vector2(0, body.getPosition().y), body.getAngle()); 
    } 

    //if player goes out of bounds Horizontally 
    if(body.getPosition().y < 0){ 
     body.setTransform(new Vector2(body.getPosition().x,8f), body.getAngle()); 
    }else if(body.getPosition().y > 8f){ 
     body.setTransform(new Vector2(body.getPosition().x,0), body.getAngle()); 
    } 

} 

然後調用該方法在我GameStage類是這樣的:

public GameStage() { 
    setUpWorld(); 
    setupCamera(); 
    setupTouchControls(); 
    player.setWraparound(); 
    renderer = new Box2DDebugRenderer(); 
} 

任何人都可以幫我嗎?

回答

0

您撥打setWraparound方法的地方是錯誤的。玩家與屏幕邊界發生碰撞後需要調用它。我建議你做以下

  1. 每個屏幕邊框創建靜態物體(可以使用該例如EdgeShape)
  2. 添加ContactListener到您的Box2D世界並檢查beginContact方法,如果玩家&牆做觸摸。
  3. 現在檢測到觸摸後,打電話給你的方法setWraparound

另外,您可以創建符合屏幕尺寸的傳感器,如果玩家觸摸傳感器邊界檢測。或者你可以檢查每一幀你的球員的x/y位置,看看他們是否在屏幕外,但最好使用box2D碰撞檢測。

+0

感謝您的建議,但我已修復它,問題是我沒有在libgdx的render方法中調用setWraparound方法,需要不斷檢查。 – Harry

+0

是的,這是我的意思是「檢查每一幀」。然而,既然你使用box2D,我建議你看看碰撞檢測;-) – donfuxx

+0

非常感謝你,我將使用與EdgeShape碰撞,如你所說。順便說一句對遊戲開發來說是一種新鮮的東西。 – Harry