Libgdx isKeyJustPressed (Input.Keys.UP) не работает и ключи не отображаются правильно - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю над проектом (римейк Mario) в Android Studio (на моем ноутбуке) и использую LibGDX. В настоящее время я пытаюсь заставить Марио двигаться в этом уроке, которому я следовал. Итак, я выполнил небольшую отладку в Android Studio и по какой-либо причине он никогда не запускается:

if (Gdx.input.isKeyJustPressed(Input.Keys.UP)) {
    Gdx.app.log("Debug", "UP is pressed");
    player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true);
}

Журнал никогда не печатается в logcat при нажатии UP.

Из того, что я могу найти, у многих людей были проблемы с этой функцией, и я не могу найти способ заставить ее работать. Некоторые форумы даже говорят, что эта функция не работает. Если это так, кто-нибудь знает альтернативный способ кодирования этого? Или есть что-то, что я делаю неправильно / не выяснил с этой функцией?

Кроме того, LibGDX не правильно читает клавиши с моей клавиатуры. Из-за использования аналогичной функции isKeyPressed(), когда я набираю (например) UP, мне нужно нажать клавишу со стрелкой вправо, чтобы go вверх в игре. Есть ли какое-то решение для этого, или я просто должен согласиться с плохим отображением клавиш из LibGDX?

Для большего контекста, клавиши, которые я нажимаю для управления Mario, с клавиатуры на моем ноутбуке. Игра работает на AVD.

Кроме того, это в моей функции handleInput() (где вызывается isKeyJustPressed()):

public void handleInput(float dt) {
        // down is mapped to my right arrow key
        // up is mapped to my left arrow key
        // left is mapped to my up arrow key
        if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
            Gdx.app.log("Debug", "W is pressed");
            player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true);
        }
        if (Gdx.input.isKeyJustPressed(Input.Keys.DOWN) && player.b2body.getLinearVelocity().x <= 2) {
            Gdx.app.log("Debug", "R is pressed");
            player.b2body.applyLinearImpulse(new Vector2(0.1f, 0), player.b2body.getWorldCenter(), true);
        }
        if (Gdx.input.isKeyPressed(Input.Keys.UP) && player.b2body.getLinearVelocity().x >= -2) {
            Gdx.app.log("Debug", "L is pressed");
            player.b2body.applyLinearImpulse(new Vector2(-0.1f, 0), player.b2body.getWorldCenter(), true);
        }
    }

Это показывает, как мои ключи не совпадают в чтобы заставить Марио двигаться. Кроме того, единственная первая функция не работает. Предполагается, что эти функции предназначены для клавиатуры на устройстве android?

Дополнительная информация: handleInput() вызывается в update() update вызывается в render Каждая из этих трех функций принимает дельта-время с плавающей точкой

Я работаю Android Studio версия 3.6.3 и номер сборки AI-192.7142.36.36.6392135.

Дайте мне знать, если что-нибудь еще будет полезно для ответа на этот вопрос. Спасибо!

...