使用 Box2D 在 libGDX 中设置环绕效果

Set up wraparound effect in libGDX with Box2D

我在尝试使用 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 class 中这样调用方法:

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

有人帮我吗?

你调用你的setWraparound方法的地方是错误的。您需要在播放器与屏幕边框发生碰撞后调用它。我建议您执行以下操作

  1. 为每个屏幕边框创建静态实体(例如,您可以为此使用 EdgeShape)
  2. 向您的 box2D 世界添加一个 ContactListener,如果玩家和墙壁确实接触,请检查 beginContact 方法。
  3. 现在检测到触摸后调用您的方法setWraparound

或者,您可以创建一个与屏幕尺寸相匹配的传感器,并检测玩家是否触摸了传感器边框。或者你可以检查每一帧你的玩家的 x/y 位置,看看他们是否在屏幕之外,但最好使用 box2D 碰撞检测。