在javascript密钥和libgdx密钥代码之间进行转换

时间:2016-06-20 14:54:46

标签: gwt libgdx

我正在将现有的webgame移植到libgdx。游戏由脚本控制,我宁愿不改变。 该脚本使用其javascript键代码值指定对某些按键事件执行的操作。 即。 “OnKeyPress = 32:”将定义按下空格时要运行的操作。 “OnKeyPress = 40:”将定义按下按下时要运行的动作等。

现在,由于LibGDX使用不同的键码系统,我需要一些方法来在按下正确的键时触发我现有的事件。

@Override
public boolean keyDown(int keycode) {
//convert input processors keycode to javascripts?
}

我只能认为我必须在它们之间创建某种大型的静态hashmap映射 GDXs Input.Keys com.google.gwt.event.dom.client.KeyCodes

但在开始这个麻烦之前,我想我会问周围,以防更好的方式吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

最后,我创建了一个类,将一个键码(com.badlogic.gdx.Input.Keys)与另一个键码相关联。 (com.google.gwt.event.dom.client.KeyCodes)

相当简单,但任何做同样事情的人都应该注意,并非所有事情都有1:1的映射。

例如;

ALT_LEFT和ALT_RIGHT都映射到gwt / javascript中的ALT。

同样CNTR左右,SHIFT左右。

GDX同时将BACKSPACE和DELETE视为相同的密钥。

当然,这是因为GDX需要跨平台,因此有不同的要求。

除此之外,只有一个ImmutableMap似乎可以完成这项工作....

/**
 * static mapping between javascript/gwt keycodes and gdxs
 **/
static ImmutableMap<Integer,Integer> keyCodeConversion = ImmutableMap.<Integer, Integer>builder()
        .put(Input.Keys.UP, GwtKeyCodeCopy.UP)
        .put(Input.Keys.DOWN, GwtKeyCodeCopy.DOWN)
        .put(Input.Keys.LEFT, GwtKeyCodeCopy.LEFT)
        .put(Input.Keys.RIGHT, GwtKeyCodeCopy.RIGHT)
        .....
        ...(lots more)
        .bind();


static public int getJavascriptKeyCode(int GdxKeycode){
    return keyCodeConversion.get(GdxKeycode);
}