2017-05-18 1 views
1

나는 libgdx를 사용하여 일종의 타이핑 트레이너를 개발하려고 노력 중이며 이런 종류의 문제로 붙어 있습니다. 키 사용자가 오히려 그것을 표시하기 위해 (문자 인 경우) 누르거나 입력을 지우려면 (스페이스 키 인 경우) 어떤 방법을 감지해야합니다. 나는이 해결책을 생각해 냈다 :누르는 키 값을 얻는 방법

StringBuilder typeArea = new StringBuilder(); 
if (Gdx.input.isKeyJustPressed(Input.Keys.A)) { 
    typeArea.append(Input.Keys.toString(Input.Keys.A)); 
} else if (Gdx.input.isKeyJustPressed(Input.Keys.B)) { 
    typeArea.append(Input.Keys.toString(Input.Keys.B)); 
} else if ... { 
      ... 
} else if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) { 
    typeArea.setLength(0); 
} 

더 우아한 방법이 있어야한다. 나는 다음과 같은 것을 찾고있다.

String letters = "abcdefg..."; 
StringBuilder typeArea = new StringBuilder(); 
if (Gdx.input.isKeyJustPressed(Input.Keys.ANY_KEY)) { 
    if (letters.indexOf(getKeyPressedValue()) >= 0) { 
     typeArea.append(getPressedKeyValue()); 
    } else if (getKeyPressedValue() == Input.Keys.SPACE) { 
     typeArea.setLength(0); 
    } 
} 

아니면 다른 방법이 더 쉽다. 어떤 제안?

답변

1

자신 만의 InputListener를 만들고 이벤트와 함께 키 코드를 보내는 keyDown 메서드를 재정의 할 수 있습니다.

InputListener il = new InputListener(){ 
     @Override 
     public boolean keyDown(InputEvent event, int keycode) { 
       typeArea.append(Keys.toString(keycode)); 
      return super.keyDown(event, keycode); 
     } 
    }; 

또는 InputProcessor를 구현하고이를 기반으로 KeyDown 메서드를 사용할 수 있습니다.

클래스에 InputProcessor 인터페이스를 구현 한 후 클래스

Gdx.input.setInputProcessor(this); 

에 입력 프로세서를 설정 내가 InputListener` 그렇게 scene2d의 일부입니다`볼 수 있듯이를 keyDown 방법

@Override 
public boolean keyDown(InputEvent event, int keycode) { 
    typeArea.append(Keys.toString(keycode)); 
    return super.keyDown(event, keycode); 
} 
+0

를 오버라이드 (override) 내 문제를 해결하기 위해서'Screen '에'Stage'를 추가하고 어떤 종류의 Actor를 추가하고이 청취자를 첨부해야합니다. 그렇습니까? –

+1

일반적인 InputProcessor를 사용하고 직접 구현할 수있는 KeyDown 이벤트를 사용할 수 있습니다. 나는 이것을 내 대답에 추가 할 것이다. – dfour

관련 문제