Java 精灵在不应该移动的时候不断移动

Java 精灵在不应该移动的时候不断移动,java,input,libgdx,Java,Input,Libgdx,我不熟悉LibGDX和游戏制作。即使未按下键.UP,精灵也会继续向上移动。我不太清楚为什么会发生这种情况,因为我试图让它只在按下键时移动 我正在创建自己的inputprocessor类,它将处理游戏的所有输入,而不是每个类处理相同的事情。由于render方法,我的主类每帧调用player.updatedelta time 为什么即使没有按“向上”键,它也会不断向上移动?它不应该在下面的条件下失败吗?GameInputProcessor是实例gip 球员级别: public void update

我不熟悉LibGDX和游戏制作。即使未按下键.UP,精灵也会继续向上移动。我不太清楚为什么会发生这种情况,因为我试图让它只在按下键时移动

我正在创建自己的inputprocessor类,它将处理游戏的所有输入,而不是每个类处理相同的事情。由于render方法,我的主类每帧调用player.updatedelta time

为什么即使没有按“向上”键,它也会不断向上移动?它不应该在下面的条件下失败吗?GameInputProcessor是实例gip

球员级别:

public void update(float dt){

    if (gip.keyDown(Keys.UP)){
        this.position.y += this.velocity * dt;
    }
GameInputProcessor类:

public boolean keyDown(int keycode){
    switch(keycode){

    case Keys.UP:
        System.out.println("up being pressed");
        return true;
    }
    return false;

}

您实际上并不是在测试密钥状态

gip.keyDown(Keys.UP)
对于此代码,将始终返回true

您希望代码看起来像

if(Gdx.input.isKeyPressed(Keys.UP)) 
    this.position.y += this.velocity * dt;
}
如果您希望包装gdx类,那么将GIP修改为

public boolean keyDown(int keycode){
    return Gdx.input.isKeyPressed(keyCode)
}

我是这样做的,但这意味着我必须把它放在我的player类中,我不想这样做,我想在GameInputProcessor类中处理它。但是它需要有一个来自最初创建它的主类的player实例的副本。我不太确定如何将此应用于GameInputProcessor类。非常感谢您的帮助。对于OO设计,这是一个好主意吗?让每个类只处理特定于类的事情?如果将来您可能想替换它,那么包装这些事情是很好的。然后你只需重写包装器,理论上一切都可以正常工作。我喜欢界面并经常使用它们。