我几乎没有疑问如何在Java LibGDX中进行平滑移动?像这样:

if(walk_right) {
    if(map[cords.x][cords.y] == 1){
        for(float i = 0f; i < 2f; i += 0.001f){ //1 tile 2f;
            cords.x += 0.001f;
        }
    }
}


但这对玩家传送1个图块无效。

最佳答案

它不起作用,因为您在渲染调用之间完全更新了x坐标。
您需要在主游戏循环中平滑更新x坐标。

简单的例子:

private float velocity = 2f;  //2 units per second
private float walkedDistance = 0f;
private boolean walkRight;

public void walkRight() {
    walkRight = true;
}

public void update(float delta) {
    if(walkRight) {
        float xMovement = delta * velocity;
        walkedDistance += xMovement;
        cords.x += xMovement;
        if (walkedDistance >= 2) {
            cords.x -= walkedDistance - 2;
            walkRight = false;
            walkedDistance = 0;
        }
    }
}

07-25 23:51