libgdx文本字段中的特殊字符不起作用

时间:2014-01-28 21:01:58

标签: java macos libgdx special-characters textfield

我可以使用setText(“åäö”),但如果我在键盘上输入它就不显示,这也不起作用

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

奇怪的是它在Mac上不起作用,但它在Windows上有效,有没有人有答案呢? 谢谢!

这是另一个类似主题的问题!

如何从Libgdx中的特殊字符获取输入?

我试图获得ascii值并通过

Gdx.input.isKeyPressed(ascii value);

但它不起作用。我已将项目编码设置为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;
        }

    });

没有打印åäö

1 个答案:

答案 0 :(得分:5)

<强>更新

看来,这与OSX上的lwjgl中的unicode字符有关: [FIXED] Unicode input

如果您更新到最新的lwjgl库2.9.1,则应该修复此问题。来自更改日志:

  

2013-10-13 kappaOne

     
      
  • ... /组织/ LWJGL / OpenGL的/ MacOSXNativeKeyboard.java,   src / native / macosx / org_lwjgl_opengl_Display.m:修复键盘键   代码返回Unicode字符而不是ASCII字符
  •   

请参阅:2.9.1-changelog.txt


原始答案

  

如何从Libgdx中的特殊字符输入?

您可以通过调用Gdx.input.setInputProcessor(inputProcessor );来实现com.badlogic.gdx.InputProcessor接口并设置当前输入处理器

然后,您应该能够在方法InputProcessor#keyTyped(char c)中接收有关所有类型字符(特殊字符或非特殊字符)的通知。

实际上这或多或少是TextField类的功能(不完全是,它通过扩展com.badlogic.gdx.scenes.scene2d.InputListener来监听输入)。

我快速浏览了TextFields keyTyped方法的相关源代码:

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

看来,文本字段的字体必须支持该字符,否则将无法显示。我没有测试它的mac,但我猜,默认情况下在Mac上使用的BitmapFont不支持特殊字符。尝试为TextField设置不同的BitmapFont(请参阅TextField.setStyle(TextFieldStyle样式)),看看是否能解决问题。