在render()中检测用户输入或在libgdx中使用InputProcessor

在render()中检测用户输入或在libgdx中使用InputProcessor,libgdx,Libgdx,我是libgdx新手,我想知道您是应该使用render()方法获取用户输入,还是应该使用InputProcessor。您应该使用InputProcessor进行用户输入 如果您想匿名写入,那么在show方法中,您应该写入:- Gdx.input.setInputProcessor(new InputProcessor() { @Override public boolean touchUp(int arg0, int arg1, int arg2, int a

我是libgdx新手,我想知道您是应该使用render()方法获取用户输入,还是应该使用InputProcessor。

您应该使用InputProcessor进行用户输入

如果您想匿名写入,那么在show方法中,您应该写入:-

 Gdx.input.setInputProcessor(new InputProcessor() {

        @Override
        public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDragged(int arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean scrolled(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean mouseMoved(int arg0, int arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyUp(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyTyped(char arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyDown(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    });
public void show() {

    Gdx.input.setInputProcessor(new InputTest());
}
或者您可以在setInputProcessor中实现输入处理器并注册实例。 例如:-

     public class InputTest implements InputProcessor {

@Override
public boolean keyDown(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyTyped(char arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyUp(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean mouseMoved(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean scrolled(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDragged(int arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}
}

在screen类的show方法中,您应该编写:-

 Gdx.input.setInputProcessor(new InputProcessor() {

        @Override
        public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDragged(int arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean scrolled(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean mouseMoved(int arg0, int arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyUp(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyTyped(char arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyDown(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    });
public void show() {

    Gdx.input.setInputProcessor(new InputTest());
}
在我的建议中,如果您不使用stage,这两种方法是获取用户输入的最佳方法。 希望这对您有用。

您应该使用InputProcessor进行用户输入

如果您想匿名写入,那么在show方法中,您应该写入:-

 Gdx.input.setInputProcessor(new InputProcessor() {

        @Override
        public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDragged(int arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean scrolled(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean mouseMoved(int arg0, int arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyUp(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyTyped(char arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyDown(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    });
public void show() {

    Gdx.input.setInputProcessor(new InputTest());
}
或者您可以在setInputProcessor中实现输入处理器并注册实例。 例如:-

     public class InputTest implements InputProcessor {

@Override
public boolean keyDown(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyTyped(char arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyUp(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean mouseMoved(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean scrolled(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDragged(int arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}
}

在screen类的show方法中,您应该编写:-

 Gdx.input.setInputProcessor(new InputProcessor() {

        @Override
        public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDragged(int arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean scrolled(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean mouseMoved(int arg0, int arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyUp(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyTyped(char arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean keyDown(int arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    });
public void show() {

    Gdx.input.setInputProcessor(new InputTest());
}
在我的建议中,如果您不使用stage,这两种方法是获取用户输入的最佳方法。
希望这对您有用。

这取决于用例。你为什么需要它?这需要完成吗

例如,如果要在按下某个键的同时移动屏幕上的精灵,则这是一个连续动作:

@Override public void render() {
    if (Gdx.input.isKeyPressed(Input.Keys.SPACE))
        sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}
但是,如果您想在用户按下某个键时更改颜色,则这是一个事件:

@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyUp (int keycode) {
            if (keycode == Input.Keys.SPACE)
                sprite.setColor(Color.RED);
        }
    });
    ...
}
请注意,轮询是建立在事件之上的一种方便方法,您自己很容易做到这一点。像这样:

private boolean moving;
@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyDown (int keycode) {
            if (keycode == Input.Keys.SPACE)
                moving = true;
        }
        @Override public boolean keyUp (int keycode) {
            if (keycode == Input.Keys.SPACE)
                moving = false;
        }
    });
    ...
}

@Override public void render() {
    if (moving)
        sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}
这通常允许您编写更干净和特定于用例的代码,如下所示:

private float speed;
@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyDown (int keycode) {
            switch (keycode) {
                case Input.Keys.LEFT: speed -= 10f; break;
                case Input.Keys.RIGHT: speed += 10f; break;
            }
        }
        @Override public boolean keyUp (int keycode) {
            switch (keycode) {
                case Input.Keys.LEFT: speed += 10f; break;
                case Input.Keys.RIGHT: speed -= 10f; break;
            }
        }
    });
    ...
}

@Override public void render() {
    sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}

考虑到这一点,在许多情况下,使用事件驱动的输入处理可能会更好。但是,如果您发现自己使用了大量的
boolean
标志,那么您也可以使用内置输入轮询。

这取决于用例。你为什么需要它?这需要完成吗

例如,如果要在按下某个键的同时移动屏幕上的精灵,则这是一个连续动作:

@Override public void render() {
    if (Gdx.input.isKeyPressed(Input.Keys.SPACE))
        sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}
但是,如果您想在用户按下某个键时更改颜色,则这是一个事件:

@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyUp (int keycode) {
            if (keycode == Input.Keys.SPACE)
                sprite.setColor(Color.RED);
        }
    });
    ...
}
请注意,轮询是建立在事件之上的一种方便方法,您自己很容易做到这一点。像这样:

private boolean moving;
@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyDown (int keycode) {
            if (keycode == Input.Keys.SPACE)
                moving = true;
        }
        @Override public boolean keyUp (int keycode) {
            if (keycode == Input.Keys.SPACE)
                moving = false;
        }
    });
    ...
}

@Override public void render() {
    if (moving)
        sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}
这通常允许您编写更干净和特定于用例的代码,如下所示:

private float speed;
@Override public void create() {
    Gdx.input.setInputProcessor(new InputAdapter() {
        @Override public boolean keyDown (int keycode) {
            switch (keycode) {
                case Input.Keys.LEFT: speed -= 10f; break;
                case Input.Keys.RIGHT: speed += 10f; break;
            }
        }
        @Override public boolean keyUp (int keycode) {
            switch (keycode) {
                case Input.Keys.LEFT: speed += 10f; break;
                case Input.Keys.RIGHT: speed -= 10f; break;
            }
        }
    });
    ...
}

@Override public void render() {
    sprite.translateX(speed * Gdx.graphics.getDeltaTime());
    ...
}

考虑到这一点,在许多情况下,使用事件驱动的输入处理可能会更好。但是,如果您发现自己使用了大量的
布尔
标志,那么您最好使用内置的输入轮询。

由您决定。根据我的经验,InputProfessor通常会导致更简单的代码。由您决定。根据我的经验,InputProfessor通常会导致更简单的代码。