다음을 통해 공유


아케이드 스틱

이 페이지에서는 UWP(유니버설 Windows 플랫폼)용 Windows.Gaming.Input.ArcadeStick 및 관련 API를 사용하여 아케이드 스틱에 대한 프로그래밍 기본 사항에 대해 설명합니다.

이 페이지를 읽으면 다음을 알게 됩니다.

  • 연결된 아케이드 스틱 및 사용자 목록을 수집하는 방법
  • 아케이드 스틱이 추가 또는 제거되었는지 감지하는 방법
  • 하나 이상의 아케이드 스틱에서 입력을 읽는 방법
  • 아케이드 스틱이 UI 탐색 디바이스로 동작하는 방법

아케이드 스틱 개요

아케이드 스틱은 스탠드업 아케이드 머신의 느낌을 재현하고 고정밀 디지털 컨트롤이 가능한 입력 장치로 평가받습니다. 아케이드 스틱은 헤드 투 헤드 파이팅 또는 기타 아케이드 스타일의 게임을 위한 완벽한 입력 장치이며, 모든 디지털 컨트롤과 잘 작동하는 모든 게임에 적합합니다. 아케이드 스틱은 Windows.Gaming.Input 네임스페이스를 통해 Windows 10 또는 Windows 11 및 Xbox One 앱용 UWP 앱에서 지원됩니다.

아케이드 스틱에는 8방향 디지털 조이스틱, 6개의 작업 버튼(아래 이미지에서 A1-A6으로 표시) 및 2개의 특수 버튼(S1 및 S2로 표시)이 장착되어 있으며, 아날로그 컨트롤이나 진동을 지원하지 않는 모든 디지털 입력 장치입니다. 아케이드 스틱에는 UI 탐색을 지원하는 데 사용되는 보기메뉴 버튼도 장착되어 있지만 게임 플레이 명령을 지원하기 위한 것이 아니며 조이스틱 버튼으로 쉽게 액세스할 수 없습니다.

Arcade stick with 4-directional joystick, 6 action buttons (A1-A6), and 2 special buttons (S1 and S2)

UI 탐색

사용자 인터페이스 탐색을 위해 여러 입력 장치를 지원해야 하는 부담을 줄이고 게임과 장치 간의 일관성을 유지하기 위해 대부분의 물리적 입력 장치는 UI 탐색 컨트롤러라는 별도의 논리 입력 장치 역할을 동시에 수행합니다. UI 탐색 컨트롤러는 입력 디바이스에서 UI 탐색 명령에 대한 일반적인 어휘를 제공합니다.

UI 탐색 컨트롤러 역할을 하는 아케이드 스틱은 탐색 명령의 필수 집합을 조이스틱 및 보기, 메뉴, 동작 1, 동작 2 단추에 매핑합니다.

탐색 명령 아케이드 스틱 입력
위로 스틱 위로
아래로 스틱 아래로
Left 스틱 왼쪽으로
Right 스틱 오른쪽으로
보기 보기 버튼
메뉴 메뉴 단추
Accept 작업 1 버튼
취소 작업 2 버튼

아케이드 스틱은 탐색 명령의 선택적 집합을 매핑하지 않습니다.

아케이드 스틱 감지 및 추적

아케이드 스틱의 감지 및 추적은 Gamepad 클래스 대신 ArcadeStick 클래스를 제외하고 게임 패드에서와 똑같은 방식으로 작동합니다. 자세한 내용은 게임 패드 및 진동을 참조하세요.

아케이드 스틱 읽기

관심 있는 아케이드 스틱을 식별한 후에는 해당 장치에서 입력을 수집할 준비가 된 것입니다. 그러나 익숙한 다른 종류의 입력과 달리 아케이드 스틱은 이벤트를 발생시켜 상태 변경을 전달하지 않습니다. 대신, 플라이트 스틱을 직접 폴링하여 현재 상태의 규칙적인 판독값을 가져올 수 있습니다.

아케이드 스틱 폴링

폴링은 정확한 시점에 아케이드 스틱의 스냅샷을 캡처합니다. 이러한 입력 수집 방법은 대부분의 게임에 적합합니다. 게임의 논리는 일반적으로 이벤트 기반 방식이 아닌 결정적 루프로 실행되기 때문입니다. 또한 시간을 두고 수집된 여러 단일 입력보다 한 번에 수집된 입력에서 게임 명령을 해석하는 것이 일반적으로 더 간단합니다.

GetCurrentReading을 호출하여 아케이드 스틱을 폴링합니다. 이 함수는 아케이드 스틱의 상태를 포함하는 ArcadeStickReading을 반환합니다.

다음 예제에서는 아케이드 스틱의 현재 상태를 폴링합니다.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

아케이드 스틱 상태 외에도 각 판독값에는 상태가 검색된 시점을 정확하게 나타내는 타임스탬프가 포함됩니다. 타임스탬프는 이전 판독값의 타이밍 또는 게임 시뮬레이션의 타이밍과 관련되는 데 유용합니다.

버튼 읽기

각 아케이드 스틱 단추, 즉 4방향 조이스틱, 동작 단추 6개, 특수 단추 2개는 단추가 눌렸는지(아래쪽), 놓였는지(위쪽)를 나타내는 디지털 판독값을 제공합니다. 단추 판독값은 효율을 위해 개별 부울 값으로 표현되지 않는 대신 ArcadeStickButtons 열거로 표현되는 단일 비트 필드로 모두 압축됩니다.

참고 항목

아케이드 스틱에는 UI 탐색에 사용되는 보기메뉴 단추와 같은 추가 단추가 탑재되어 있습니다. 이러한 버튼은 ArcadeStickButtons 열거형의 일부가 아니며 아케이드 스틱에 UI 탐색 장치로 액세스해야만 읽을 수 있습니다. 자세한 내용은 UI 탐색 디바이스를 참조하세요.

버튼 값은 ArcadeStickReading 구조체의 Buttons 속성에서 읽습니다. 이 속성은 비트 필드이기 때문에 비트 마스킹은 관심 있는 버튼의 값을 격리하는 데 사용됩니다. 해당 비트가 설정된 경우에는 단추가 눌리고(아래), 그러지 않은 경우에는 놓입니다(위).

다음 예제에서는 동작 1 단추가 눌렸는지 확인합니다.

if (ArcadeStickButtons::Action1 == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is pressed
}

다음 예제에서는 동작 1 단추가 놓였는지 확인합니다.

if (ArcadeStickButtons::None == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is released (not pressed)
}

단추가 눌렸다가 놓이거나, 반대로 놓였다가 눌렸을 때 여러 개의 단추가 눌렸거나 놓였는지 또는 일련의 단추가 특정 방식으로 정렬되었는지(일부는 눌리고 일부는 놓임) 확인해야 하는 경우가 있습니다. 이러한 조건을 검색하는 방법에 대한 자세한 내용은 버튼 전환 감지복잡한 버튼 정렬 검색을 참조하세요.

InputInterfacing 샘플 실행

InputInterfacingUWP 샘플(github)은 아케이드 스틱 및 다양한 종류의 입력 디바이스를 함께 사용하는 방법과 이러한 입력 디바이스가 UI 탐색 컨트롤러로 작동하는 방식을 보여 줍니다.

참고 항목