libgdx有些按键比其他按键更快?

时间:2016-08-29 12:31:43

标签: java input libgdx

我最近开始使用libgdx进行编码,并在一个世界中建立了一个小小的移动"游戏。问题是它向上和向左(W和A)比向右和向下更快。 W,A和D,S的代码没有区别。 这是我的输入处理代码,在"渲染"之后的每一帧都被调用:

public void processInput() {
    float delta = Gdx.graphics.getDeltaTime();
    System.out.println(1.0/delta);
    if (Gdx.input.isKeyJustPressed(Keys.A)) {
        player.posX -= 100 * delta;
        player.startAnimation(0); // Animation 0 = LEFT
        elapsedTime = 0;
    } else if (Gdx.input.isKeyJustPressed(Keys.D)) {
        player.posX += 100 * delta;
        player.startAnimation(1); // Animation 1 = RIGHT
        elapsedTime = 0;
    }
    if (Gdx.input.isKeyJustPressed(Keys.W)) {
        player.posY -= 100 * delta;
        player.startAnimation(2); // Animation 2 = BACK
        elapsedTime = 0;
    } else if (Gdx.input.isKeyJustPressed(Keys.S)) {
        player.posY += 100 * delta;
        player.startAnimation(3); // Animation 3 = FRONT
        elapsedTime = 0;
    }
    if(Gdx.input.isKeyJustPressed(Keys.ESCAPE)){
        Gdx.app.exit();
    }

    boolean pressed = false;
    if (Gdx.input.isKeyPressed(Keys.A)) {
        player.posX -= 100 * delta;
        pressed = true;
    } else if (Gdx.input.isKeyPressed(Keys.D)) {
        player.posX += 100 * delta;
        pressed = true;
    }
    if (Gdx.input.isKeyPressed(Keys.W)) {
        player.posY -= 100 * delta;
        pressed = true;
    } else if (Gdx.input.isKeyPressed(Keys.S)) {
        player.posY += 100 * delta;
        pressed = true;
    }
    if (!pressed) {
        player.stopAnimation();
    }

    if(player.posX < 0){
        player.posX = 0;
    }
    if(player.posY < 0){
        player.posY = 0;
    }
    if(player.posX > world.sizeX()*50){
        player.posX = world.sizeX()*50;
    }
    if(player.posY > world.sizeY()*50){
        player.posY = world.sizeY()*50;;
    }

    player.update(delta);
}

此处还有一个包含完整代码的保管箱链接:https://www.dropbox.com/sh/p8umkyiyd663now/AAC4zt716rII-8sQpEbfuNuZa?dl=0

1 个答案:

答案 0 :(得分:2)

问题是您将玩家位置存储为整数值。在delta计算之后,播放器速度非常小,将浮动值转换为整数会对速度产生巨大影响。

<强>比较

在W和A键的情况下,作为整数的Delta位置是2,在S和D上是1。

两种情况下,作为浮动的Delta位置约为1.7。

解决方案:使用浮点值存储玩家位置。使用整数值仅在某些基于网格的游戏中才有意义。

public float posX;
public float posY;