2016-06-20 7 views
0

私は既存のウェブゲームをlibgdxに移植しています。ゲームは私がむしろ変更しないスクリプトによって制御されます。 このスクリプトは、特定のキー押しイベントに対して、javascriptのキーコード値を使用して実行するアクションを指定します。 すなわち"OnKeyPress = 32:"は、スペースが押されたときに実行するアクションを定義します。 "OnKeyPress = 40:"は、ダウンが押されたときに実行するアクションを定義します。javascriptのキーコードとlibgdxのキーコードをカバーする

LibGDXは異なるキーコードシステムを使用するため、正しいキーが押されたときに既存のイベントを起動する方法が必要です。

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

私は GDXs Input.Keyscom.google.gwt.event.dom.client.KeyCodes

との間に大きな静的ハッシュマップのマッピングのいくつかの並べ替えを作成する必要が唯一考えることができます

しかし、この邪魔になる前に、私はIDがもっと良い方法であれば尋ねると思いました。最後に

答えて

0

おかげで、私は別と1つのキーコード(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); 
}