2015-06-14 36 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