다음을 통해 공유


GameInput의 키보드 및 마우스

이 항목을 사용하여 키보드와 마우스에 고유한 사용법을 이해합니다. 키보드와 마우스는 GameInput에 대한 기본 입력입니다.

GameInput은(는) 여러 장치가 동시에 연결되어 있는 경우 키보드와 마우스 입력을 위한 고유한 장치를 만듭니다. 원하는 경우 게임에서 고유한 키보드와 마우스를 관리할 수 있습니다. 보다 일반적인 용례는 모든 키보드 또는 마우스 입력을 하나의 시스템 상태로 결합하는 것입니다. 이것은 CreateAggregateDevice의 사용을 통해 가능하며, 게임이 하나의 가상 키보드와 마우스만 처리하면 되도록 여러 입력을 결합할 것입니다. 자세한 내용은 IGameInputDevice를 참조하세요.

GameInput에서 장치 및 입력 판독값이 작동하는 방법에 대한 자세한 내용은 GameInput 판독값GameInput 장치를 참조하세요.

참고 항목

CreateAggregateDevice는 현재 지원되지 않습니다.

키보드 입력

GetKeyState 메서드는 키보드에서 눌린 각 키에 대한 스캔 코드 및 가상 키 데이터를 검색합니다. 그런 다음 이 입력 데이터는 GameInputKeyState 구조체의 가변 길이 배열로 반환됩니다. 눌린 키는 키보드에서 입력이 보고될 때 눌려지는 키입니다. 키보드는 보통 125Hz에서 1000Hz 범위로 입력을 보고하는 빈도에 따라 다릅니다. 키보드 상태는 시스템에 연결된 각 개별 키보드에 대해 개별적으로 보고됩니다. IGameInput 인터페이스의 CreateAggregateDevice 메서드를 사용하여 시스템 키보드 상태를 결합할 수 있습니다.

기본 키보드 상태는 이동 또는 무기 발사와 같이 키보드 입력을 게임 동작에 매핑하기 위한 용도로 사용됩니다. 이는 일반 텍스트 입력 및 해당 목적에 사용되는 기타 API에는 사용되지 않습니다.

키 상태 읽기

다음 코드를 사용하여 타이틀에 키보드 및 마우스용 GameInput을(를) 구현합니다.

uint32_t GetKeyState(  
    uint32_t stateArrayCount,  
    GameInputKeyState* stateArray  
)  

typedef struct  GameInputKeyState
{
    uint32_t scanCode;
    uint32_t codePoint;
    uint8_t virtualKey;
    bool isDeadKey;
} GameInputKeyState;

각 키의 상태는 배열 내에서 고정된 인덱스에 저장되지 않습니다. 대신 키를 누르면 배열에 있는 유효한 요소 수가 증가합니다. 키를 놓으면 때 배열이 줄어듭니다. 배열 끝에 새 키가 추가되고, 키를 누르면 간격을 채우기 위해 모든 항목이 아래로 이동합니다. GetKeyCount는 다음 코드에 표시된 것 같이 눌린 키 수를 반환합니다. 이는 GetKeyState에 할당할 배열의 크기를 결정하는 데 사용됩니다. GetKeyState에 전달된 stateArray이(가) 눌린 키의 수보다 크면 과잉 배열 요소가 쓰이거나 0으로 설정되지 않습니다. 반대로, stateArray이(가) 눌린 키의 수보다 작으면 배열이 채워지고 과잉 누름 키가 누락됩니다.

uint32_t GetKeyCount()  

표준 키보드는 한 번에 4~6개 키 누름만 보고할 수 있으며, 고급 게이밍 키보드라도 한 번에 12~16개 이상의 키를 지원하지 않습니다. 따라서 GetKeyCount을(를) 사용하면 배열의 크기를 작게 유지합니다. 최대 크기는 IGameInputDevice 인터페이스를 통해 쿼리할 수 있습니다.

codePoint 멤버는 현재 자판 배열을 기준으로 시스템이 관련 키 캡에 인쇄되었다고 생각하는 문자 모양을 지정합니다. 이것은 텍스트 입력 문자열을 빌드하는 것이 아니라 입력 매핑 인터페이스에서 키의 표현을 표시하기 위한 것입니다.

마우스 입력

GetMouseState 메서드는 다음 코드에서와 같이 단일 GameInputMouseState 구조체에서 반환되는 마우스의 이동 및 단추 상태를 검색합니다. 키보드 상태와 마찬가지로 마우스 상태는 시스템에 연결된 각 개별 마우스에 대해 개별적으로 보고됩니다. 키보드 입력과 마찬가지로 IGameInput 인터페이스의 CreateAggregateDevice 메서드는 시스템 마우스 상태를 결합하는 데 사용됩니다.

bool GetMouseState(  
    GameInputMouseState* state  
)  

typedef struct GameInputMouseState
{
    GameInputMouseButtons buttons;
    int64_t positionX;
    int64_t positionY;
    int64_t wheelX;
    int64_t wheelY;
} GameInputMouseState;

typedef enum GameInputMouseButtons
{
    GameInputMouseNone          = 0x00000000,
    GameInputMouseLeftButton    = 0x00000001,
    GameInputMouseRightButton   = 0x00000002,
    GameInputMouseMiddleButton  = 0x00000004,
    GameInputMouseButton4       = 0x00000008,
    GameInputMouseButton5       = 0x00000010,
    GameInputMouseWheelTiltLeft = 0x00000020,
    GameInputMouseWhelTiltRight = 0x00000040
} GameInputMouseButtons;

마우스 이동 읽기

마우스 이동은 기본적으로 절대 위치가 아닌 일련의 델타값으로 보고됩니다. 현재 마우스 수치를 주기적으로 확인하면 중간의 여러 델타 값을 놓칠 가능성이 높기 때문에 이것은 GetCurrentReading의 폴링 특성과 호환성이 높지 않습니다.

GetNextReading을 사용하여 잠재적으로 수십 개의 과거 마우스 읽기를 살펴보도록 강제하고, 델타를 추가하는 대신, 델타를 가상 positionXpositionY 값으로 누적됩니다. 여기에서 입수한 이전 판독값에서 positionXpositionY 값을 빼서 델타를 계산할 수 있습니다. 개별 델타는 모든 중간 읽기 값을 통해 반복할 때 또는 중간 읽기 값을 의도적으로 건너뛴 경우 누적 델타를 통해 액세스할 수 있습니다.

positionXpositionY 값은 모든 이동 델타의 합계입니다. 어떤 방법으로든 화면 공간 좌표와는 관련이 없습니다. 누적된 델타 값은 입력 포커스가 있는 동안 프로세스에서 받는 마우스 이벤트에만 해당됩니다.

사용자 연결

현재 키보드 및 마우스에 대한 사용자 연결 기능은 지원되지 않습니다. 이러한 주변 장치를 사용자에게 매핑하기 위한 인터페이스는 없습니다.

참고 항목

GameInput 읽기

GameInput 장치

고급 GameInput 항목

입력 API 참조