是否有一种干净的方法来实现libgdx跨平台控件的实现

时间:2014-03-25 11:50:59

标签: java user-controls libgdx

我目前刚刚开始与Libgdx合作。我达到了一个我想考虑跨平台(PC /手持设备)问题的地步。我无法找到解决问题的一个重要问题如下: 我不希望每个可控实体都是InputAdapter的扩展,然后包含if(PC){switch:case key:increaseSpeed(); } else if(handheld){switch:case touch:increaseSpeed();}

是否有实现某些内容以便实体只接收与用户输入相关的程序含义?

很抱歉,如果我的问题太模糊:' (

2 个答案:

答案 0 :(得分:0)

你应该看一下:Interfacing with plaform specific code

但在你的情况下,你可能不会使用interface。基本思想是,在您的不同平台特定项目中,您将实现InputAdapter,例如DesktopController extends InputAdapter。然后,您将InputAdapter提供给ApplicationListener。不知怎的,这样:

public class MyGame implements ApplicationListener {
    private final InputAdapter controller;

    public MyGame(InputAdapter controller) {
        this.controller = controller;
        // this controller can now be used
        // Gdx.input.setInputProcessor(controller);
    }

}

public static void main(String[] argv) {
    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
    new LwjglApplication(new MyGame(new DesktopController()), config);
}

答案 1 :(得分:0)

一般来说,Libgdx应用程序只处理所有输入,并且不用担心他们会使用哪种设备。像这样:

...

@Override
public boolean keyDown(int keycode) {
    if (keycode == Keys.RIGHT)
        increaseSpeed();
    return true;
}

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    increaseSpeed();
    return true;
}

这是使用基于事件的InputProcessor来处理输入事件。

LibGDX确实将桌面鼠标事件映射到" touch"事件,所以你可以折叠PC / Android输入处理的那一部分,但没有任何通用的映射键盘键来触摸事件或类似的东西。