使用 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
方法的地方是错误的。您需要在播放器与屏幕边框发生碰撞后调用它。我建议您执行以下操作
- 为每个屏幕边框创建静态实体(例如,您可以为此使用 EdgeShape)
- 向您的 box2D 世界添加一个
ContactListener
,如果玩家和墙壁确实接触,请检查 beginContact
方法。
- 现在检测到触摸后调用您的方法
setWraparound
或者,您可以创建一个与屏幕尺寸相匹配的传感器,并检测玩家是否触摸了传感器边框。或者你可以检查每一帧你的玩家的 x/y 位置,看看他们是否在屏幕之外,但最好使用 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
方法的地方是错误的。您需要在播放器与屏幕边框发生碰撞后调用它。我建议您执行以下操作
- 为每个屏幕边框创建静态实体(例如,您可以为此使用 EdgeShape)
- 向您的 box2D 世界添加一个
ContactListener
,如果玩家和墙壁确实接触,请检查beginContact
方法。 - 现在检测到触摸后调用您的方法
setWraparound
或者,您可以创建一个与屏幕尺寸相匹配的传感器,并检测玩家是否触摸了传感器边框。或者你可以检查每一帧你的玩家的 x/y 位置,看看他们是否在屏幕之外,但最好使用 box2D 碰撞检测。