【问题标题】:Sprite constantly moving when shouldn't精灵在不应该移动的时候不断移动
【发布时间】:2014-11-24 00:56:17
【问题描述】:

我是 LibGDX 和游戏制作的新手。即使没有按下Keys.UP,精灵也会继续向上移动。不太清楚为什么会发生这种情况,因为我试图让它移动只是为了响应 Keys.UP 被按下。

我正在制作自己的输入处理器类,它将处理游戏的所有输入,而不是每个类都处理相同的事情。由于 render 方法,我的主类每帧调用 player.update(delta time)。

为什么即使Keys.UP 没有被按下,它也会不断向上移动?它不应该在下面的条件下失败吗? (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;

}

【问题讨论】:

    标签: java input libgdx


    【解决方案1】:

    您实际上并没有测试密钥状态。

    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)
    }
    

    【讨论】:

    • 我正在这样做,但这意味着我必须将它放在我的播放器类中,我不想这样做,我想在 GameInputProcessor 类中处理它。但是它需要从最初创建它的主类中获得播放器实例的副本。我不太确定如何将其提供给 GameInputProcessor 类。
    • 非常感谢您的工作。对于 OO 设计,这是一个好主意吗?是否每个班级都只从事班级特定的事情?
    • 如果您将来想更换它,最好把东西包装起来。然后你只需重写包装器,理论上一切仍然有效。我喜欢界面并且经常使用它们。
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2011-11-28
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多