다른 키보드 레이아웃을 어떻게 처리 할 수 ​​있습니까?


10

QWERTY 레이아웃에서 WASD 컨트롤을 사용하는 게임이 있다고 가정하겠습니다. 예를 들어, Dvorak 레이아웃에서 이러한 컨트롤을 사용하는 것은 이상적이지 않습니다 ( <A:HQWERTY 와 동일 ). 분명히, QWERTY가 ( ,aoeDVORAK에서) 사용하는 것과 동일한 물리적 키를 사용하고 싶습니다 .

몇 가지 가능한 해결책을 생각해 냈습니다.

  • 사용자가 QWERTY를 사용하도록 강제
    • 특히 해외 사용자에게는 이상적이지 않습니다.
  • 키보드 레이아웃에 따라 단축키 변경 (WASD->, aoe)
    • 지원되는 각 레이아웃에 대해 레이아웃 맵을 작성하도록합니다 (자동)
    • WASD보다 더 많은 단축키가있는 경우 사용자에게 가장 쉬운 방법
  • 사용자가 바로 가기를 직접 정의하도록합니다.
    • 보다 유연한
    • 지름길이 많으면 성가신
    • 두 번째 옵션과 함께 사용할 수 있습니다
  • 하드웨어 키 코드 사용
    • 키보드에서 일관된?

이런 종류의 일은 보통 어떻게 처리됩니까?

답변:


9

스캔 코드를 청취하십시오. 이 작업을 수행하는 방법은 목록에없는 OS에 따라 다릅니다. Windows에서는 MapVirtualKey 를 사용하여 WM_KEYDOWN 및 친구로부터 지정된 가상 키 코드에 대한 스캔 코드를 얻을 수 있습니다. . 스캔 코드는 실제 키를 기반으로하며 레이아웃의 영향을받지 않습니다.

http://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/를 빠르게 읽으십시오 . .

따라서 Nicol Bolas가 말했듯이 사용자가 해결할 수 있으며 해결해야합니다. 그러나 상자에서 바로 작동시키는 것은 어렵지 않으며 사용자는 그것을 높이 평가할 것입니다.

대다수의 게임 개발자와 같이 문자 입력을 잘못 처리하고있을 수 있습니다. 텍스트의 경우 텍스트 입력에 WM_KEYDOWN을 사용하지 말고 항상 WM_CHAR (또는 다른 OS에서 이에 상응하는 것)을 사용해야 합니다 . 'a'키를 누를 때 일부 레이아웃에서 데드 키를 사용하기 때문에 텍스트 입력 컨트롤에 'a'를 입력해야한다고 가정하는 것은 완전히 잘못입니다. 당신은 또한 지원할 수 있습니다 키보드에 비해 문자 수가 훨씬 많고 입력을 위해 특별한 UI가 필요한 동아시아 시장에서 IME (또는 OS와 동등한)를 . 게임에서 IME를 처리하는 것은 고통이지만 (처리하는 것은 전혀 고통 스럽지만) 내 생각으로는 훨씬 더 큰 시장에 제품의 매력을 높이는 데 가치가 있다고 생각합니다. 다시 말하지만 WM_KEYDOWN은 절대로 텍스트에 사용되지 않습니다.


좋은 조언. 일반적인 지침 / 예상을 찾고 있었기 때문에 OS를 나열하지 않았습니다 (구현 세부 사항을 처리 할 수 ​​있음).
beatgammit

6

항상 플레이어에게 키 할당을 변경할 수있는 기능을 제공 해야 합니다. 그것이 "보통 처리"되는 방식입니다. 플레이어가 변경하도록하십시오. 일부 플레이어는 게임을 할 때 키보드가 QWERTY로 설정 될 것입니다. 대부분의 게임이 기대하는 것입니다. 일부는 현재 키보드로 설정된 상태로두고 키를 변경하는 기능에 의존합니다.


1
언어가 바뀌면 어떨까요? 예를 들어, 프랑스어로 게임을하더라도 AZERTY 레이아웃을 유지하려면 프랑스어에서 WASD-> ZQSD를 변경해야합니까?
beatgammit

1
@ tjameson : 내 대답을 읽었습니까? 그들에게 핵심 과제를 재정의하자 . 그러면 문제가 없습니다.
Nicol Bolas

1
네, 나는 당신의 대답을 읽었 으며 아마도 당신의 조언과 함께 갈 것입니다. 다른 로케일의 사용자에게 배송 할 때 기대가 없는지 확인하고 싶었습니다.
beatgammit

3

스캔 코드를들을 수없는 경우 (예 : 플래시 게임을 개발할 때) 최대한 많은 레이아웃에서 작동하는 키 바인딩을 만들 수 있습니다. 대부분의 키보드 레이아웃은 몇 가지 예외를 제외하고는 매우 유사합니다.

ISO 9995 다음에 나오는 키보드 레이아웃은 다음과 같습니다 :

ISO 이후 키보드 레이아웃

기본적으로 검은 색 키는 사용하기에 안전합니다.


keyoard 레이아웃에 대한 자세한 내용은 참조 QWERTY , QWERTZ , AZERTYQZERTY
척 Walbourn

3

대부분의 대규모 예산 게임 (국제 유통 업체와 함께 제공되는 게임)은 아제 라이트 레이아웃에 WASD 대신 ZQSD를 사용하여 즉시 사용할 수 있습니다. 괜찮은 게임은 첫 번째 레벨의 레이아웃을 소개하고 다른 게임은 사용자 정의 화면을 통해 플레이어가 그것을 발견하게합니다. OS에 레이아웃을 전환하도록 요청하여 구현 전략을 감지 할 수 있습니다. 게임은 내부적으로 스캔 코드 (위치)를 사용하고 구성 대화 상자와 프롬프트를 표시 할 때 키 코드 (기호)에 매핑합니다. 또는 내부적으로 키 코드를 사용하며 시작시 또는 처음 시작할 때 레이아웃을 감지합니다.

첫 번째 전략 (내부 스캔 코드)은보다 강력하지만 추상화가 누출되지 않도록 약간의주의가 필요합니다. 사용자에게 키를 제시 할 때 (자습서, 프롬프트 및 사용자 정의 대화 상자에서) 스캔 코드를 키 코드에 다시 매핑해야합니다. 텍스트를 입력 할 때 키 코드를 살펴 봐야합니다 (예를 들어 플레이어 유형의 이름 그대로). 그보다 더 많은 텍스트를 처리해야하는 경우 게임 엔진의 범위를 벗어난 플랫폼의 텍스트 입력 지원 (죽은 키 처리, Capslock, 복사 붙여 넣기, 고급 입력 방법…)을 사용하십시오.

스캔 코드를 사용하지 않은 게임을 포팅 할 때 (스캔 코드도 하드웨어에 가깝고 빠르기 때문에 괜찮은 엔진에서는 그렇지 않습니다) 다른 전략이 더 실용적 일 수 있습니다. SDL2 함수 SDL_GetKeyFromScancodeSDL_GetScancodeFromKey 또는 플랫폼 별 기능을 사용하여 스캔 코드를 키 코드에 맵핑 할 수 있습니다 . SDL2 이벤트 루프도 사용하는 경우 해당 기능은 레이아웃 스위치 전체에서 정확하게 유지됩니다. Windows에서 GetKeyboardLayout ()과 같은 기능을 피하십시오. 알려진 목록에서 레이아웃을 찾을 수 있다는 보장은 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.