我正在创建一个跑步游戏,这是一个截图: screenshot1
我把我的世界分成几块,我遇到了碰撞问题。正如你在左下角看到的(非常小的),我有多个理由,他们正在向左移动。有时(有时,我的意思是随机地)跑步者在两个块之间颠簸并跟随地面向左...... screenshot2 (在截图上我把跑步者放在中间,这样我就可以截图了)
我为此写了一个小修复,但我发现它非常非常 [...] 非常肮脏:
public void fixWeirdCollisionBug() {
body.setTransform(body.getPosition().x, body.getPosition().y + transformToScreen(0.0002f), body.getAngle());
}
我将地面向上移动(只是一点点),跑步者在哪里,以避免在两个地面之间出现这个错误。其实我正在寻找一种更好的方法来做到这一点......
我还有另一个问题。我希望我的跑步者能够以正 x 速度跳跃,这样他就可以在地面上前进。我的地面是一个运动体,我的球员是一个动态体。我将玩家的摩擦力设置为 0,因此他保持初始状态并且不会“跟随”地面。问题是我希望跑步者在跳跃时继续前进并慢慢回到初始状态。
我尝试了以下方法,但它不起作用,跑步者一直在地上滑动:
public void jump() {
if(!jumping) {
System.out.println("Jump !");
body.getFixtureList().get(0).setFriction(0.1f);
body.applyLinearImpulse(getUserData().getJumpingLinearImpulse(), body.getWorldCenter(), true);
jumping = true;
}
}
当跑步者处于初始状态时:
if(body.getFixtureList().get(0).getFriction() != 0 && body.getPosition().x < Constants.RUNNER_X_DEFAULT) {
System.out.println("reset friction");
body.getFixtureList().get(0).setFriction(0);
body.setTransform(Constants.RUNNER_X_DEFAULT, body.getPosition().y, body.getAngle());
body.setLinearVelocity(0, 0); //also try to reset velocity to remove the sliding effect, but doesn't work
}
(这是在跑步者的 act() 方法中)
我希望有人能找出我的代码有什么问题,因为它开始让我头疼......非常感谢
编辑:我尝试使用 HorizontalGroup 来解决随机颠簸:不起作用