2014-01-28 91 views
5

我可以使用的setText(「AAO」),但如果我在我的鍵盤上鍵入它不露面,這並不工作,要麼在libgdx的文本字段中的特殊字符不工作

  public void keyTyped(TextField textField, char key) { 
       JOptionPane.showMessageDialog(new JFrame(), key); 
      } 

奇怪的是它不能在Mac上工作,但它在Windows上工作,有沒有人有這樣的答案? 謝謝!

下面是另外一個類似主題的問題!

如何從Libgdx中的特殊字符獲取輸入?

我試圖讓ASCII值,並通過

Gdx.input.isKeyPressed(ascii value); 

puting它,但它不工作。我已將項目編碼設置爲UTF-8,並且可以打印特殊字符,如åäö。

編輯: 我想這

Gdx.input.setInputProcessor(new InputProcessor() { 

     @Override 
     public boolean keyDown(int keycode) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyUp(int keycode) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyTyped(char character) { 
      System.out.println(character); 
      return false; 
     } 

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

     @Override 
     public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
      return false; 
     } 

     @Override 
     public boolean touchDragged(int screenX, int screenY, int pointer) { 
      return false; 
     } 

     @Override 
     public boolean mouseMoved(int screenX, int screenY) { 
      return false; 
     } 

     @Override 
     public boolean scrolled(int amount) { 
      return false; 
     } 

    }); 

沒有打印AAO

+0

編碼字符串可能會有所幫助。使用UTF8 – BennX

+1

@BennX它不起作用,因爲關鍵不是å,ä或ö。如果你知道我的意思,那麼關鍵就沒有任何意義,但是你知道爲什麼它可以在Windows上運行,而不是在Os x上運行? – thetheodor

+0

這兩個工作都可以在Windows上使用,而不是在Mac上使用?當您使用Mac時,您是否可以在其他應用程序中輸入åäö? – Springrbua

回答

5

UPDATE

看來,這是LWJGL相關的錯誤Unicode字符在OSX : [FIXED] Unicode input

如果更新到最新的lwjgl庫2.9.1,這應該是固定的。從更新日誌:

2013年10月13日kappaOne

  • ... /組織/ LWJGL/OpenGL的/ MacOSXNativeKeyboard.java, 的src /本地/ MacOSX的/ org_lwjgl_opengl_Display.m:固定鍵盤的鍵 碼返回Unicode字符,而不是ASCII字符

見:2.9.1-changelog.txt


原來的答案

你如何從特殊字符輸入Libgdx?

可以實現接口com.badlogic.gdx.InputProcessor,並通過調用Gdx.input.setInputProcessor(inputProcessor);

設定的電流輸入處理器那麼你應該能夠接收的所有輸入的字符通知(特殊與否)方法InputProcessor#keyTyped(char c)。

實際上,這或多或少是類TextField所做的(不完全是,它通過擴展com.badlogic.gdx.scenes.scene2d.InputListener來監聽輸入)。

我有一個快速瀏覽一下的TextField方法的keyTyped的相關源代碼:

[...] 
if (font.containsCharacter(character)) { 
    // here the character gets added to the text field 
} 
[...] 

如此看來,文本字段的字體必須支持的字符,否則將不顯示。我沒有mac來測試這個,但我猜測,默認情況下在你的mac上使用的BitmapFont不支持特殊字符。嘗試爲TextField設置不同的BitmapFont(請參閱TextField.setStyle(TextFieldStyle樣式))並查看是否可以解決該問題。

+0

輸入åäö時,在InputProcessor中的keyTyped方法期間會發生什麼?它是不是被調用或打印錯誤的字符? – Balder

+0

剛剛編輯我的答案:這是最有可能固定在lwjgl 2.9.1 – Balder

+0

謝謝你的一切,還沒有嘗試過,但我相信這是答案,謝謝! – thetheodor