我正在将现有的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
但在开始这个麻烦之前,我想我会问周围,以防更好的方式吗?
谢谢,
答案 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);
}