java - libgdx 某些按键比其他按键快?

标签 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

最佳答案

问题在于您将玩家位置存储为整数值。经过增量计算后,玩家速度非常小,因此将浮点值转换为整数会对速度产生巨大影响。

比较

对于 W 和 A 键,Delta 位置整数为 2,对于 S 和 D 键,Delta 位置为 1。

在这两种情况下, float 位置的增量位置约为 1.7。

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

public float posX;
public float posY;

关于java - libgdx 某些按键比其他按键快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206431/

相关文章:

java - 系统找不到指定的路径

java - Java中如何检查4位数字代码中是否有双字母

javascript - 从用户输入中查找 csv 文件内容的精确值

html - HTML5 日期选择器是否有任何样式选项?

java - Sprite 旋转无法正常工作 LibGDX

java - LibGDX sprite 批处理字体坏比例渲染

libgdx - 为单个 Actor 设置着色器

java - 我如何使用 Arrays.toString(reverse) 打印我的数组而不使用 []

java - JBoss 4.2 - 同一 JBoss 上的多个应用程序处于 Debug模式?

java - 不在for循环中执行第二个条件