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

Java 是否有一种干净的方法来实现libgdx跨平台控件,java,user-controls,libgdx,Java,User Controls,Libgdx,我目前刚刚开始使用Libgdx。我达到了一个点,我想考虑跨平台(PC /手持)的问题。有一个重要问题我似乎找不到解决办法,那就是: 我不希望每个可控实体都是InputAdapter的扩展,然后包含if(PC){switch:case-key:increaseSpeed();}否则if(手持){switch:case-touch:increaseSpeed();} 是否有一种方法来实现某些东西,以便实体只接收用户输入的与程序相关的含义 对不起,如果我的问题太模糊:“(你应该看看这个: 但在您的情况

我目前刚刚开始使用Libgdx。我达到了一个点,我想考虑跨平台(PC /手持)的问题。有一个重要问题我似乎找不到解决办法,那就是: 我不希望每个可控实体都是InputAdapter的扩展,然后包含if(PC){switch:case-key:increaseSpeed();}否则if(手持){switch:case-touch:increaseSpeed();}

是否有一种方法来实现某些东西,以便实体只接收用户输入的与程序相关的含义


对不起,如果我的问题太模糊:“(

你应该看看这个:

但在您的情况下,您可能不会使用
接口
。基本思想是,在不同的特定于平台的项目中,您将实现一个
InputAdapter
,例如
DesktopController扩展InputAdapter
。然后您将向
应用程序的Listener提供该
InputAdapter
e> .不知何故:

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

一般来说,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;
}
这是使用基于事件的方法来处理输入事件


LibGDX确实将桌面鼠标事件映射到“触摸”事件上,因此您可以折叠PC/Android输入处理的这一部分,但没有通用的方法将键盘键映射到触摸事件或类似事件。

您的意思是我将创建控制器(具有用户IPUT的程序特定含义)在调用游戏之前,将其输入到游戏中。然后,在程序体内,该控制器应该给出程序的特定含义,而不是用户输入。对吗?我真的不理解。没问题。谢谢你的努力:)抱歉,但是,我不能将此标记为答案。而且,此代码进入共享的“游戏”项目,而不是桌面或android,对吗?是的,这是你的“游戏”项目的所有独立于平台的代码。太棒了!谢谢你的回答:D