Summary

  • 2012년 Gamepad 초안은 브라우저 게임에 버튼과 축 값을 직접 전달했다. 패드가 키보드나 마우스 흉내만 내면 아날로그 입력의 세기가 사라지고 별도 소프트웨어도 필요했다.
  • 2025년 W3C 초안은 실제 게임패드 조작이 관찰되기 전까지 getGamepads()가 빈 목록을 돌려주도록 한다. 장치를 몰래 세는 일을 막는 장치이며, Permissions Policy는 별도 관문이다.

플레이어가 패드를 연결하고 게임을 연다. 키보드는 키가 눌렸다고 말할 수 있지만 트리거를 얼마나 당겼는지는 잘 표현하지 못한다. 마우스로 운전대의 미세한 방향을 설명하는 일은 더 우스꽝스럽다. 2012년 5월 W3C 첫 공개 초안은 그 어색한 통역을 없애려 했다. 버튼, 축, 식별자, 장치 번호, 상태 갱신 시간을 스크립트에 제공하고 연결·해제 이벤트도 담았다. 패드가 사무용 키보드 옷을 입지 않아도 되는 길이다.

값의 의미는 간단하다. 축은 -1에서 1, 버튼은 0에서 1 사이. 절반 당긴 트리거는 단순히 «눌림»으로 뭉개지지 않는다. id는 장치 종류를, 번호는 여러 패드의 자리를 알려준다. 소파에 네 사람이 앉아 누가 게임을 멈췄는지 알아야 할 때 유용하다. 한편 게임이 시작되기도 전에 장치 목록이 보인다면, 게임과 무관한 페이지도 방문자의 책상 옆 기구를 셀 수 있다. 편리한 명단에는 구경꾼이 붙는다.

소개는 플레이어의 손에서 시작하는 편이 낫다. 2025년 7월 10일 W3C 초안은 게임패드에서 사용자 조작이 관찰되기 전 navigator.getGamepads()가 빈 목록을 반환한다고 적는다. 문서는 기기 지문 완화를 이유로 든다. 하드웨어는 연결돼 있어도 페이지에는 아직 드러나지 않는다. 플레이어가 버튼을 누르거나 제자리로 돌아오는 스틱을 의도적으로 움직이면 브라우저가 패드를 소개한다. 사이트의 호기심보다 사람의 손이 빠르다.

하지만 초인종에도 오작동이 있다. 눌린 채 유지되는 스위치가 있고, 가운데에서 미세하게 흔들리는 스틱도 있다. 그런 상태를 새 인사로 세면 낡은 스프링이 플레이어 대신 모든 웹페이지에 자기소개를 한다. 2025년 초안은 중립 상태에서 벗어나는 변화를 따진다. 풀려 있던 버튼이 눌리거나, 중심에 있던 축이 정해진 문턱을 넘어야 한다. 우연한 흔들림에 문을 열어 주지 않으려는 세부 규칙이다.

관문은 하나 더 있다. 완전히 활성화되지 않은 문서는 빈 목록을 받고, gamepad Permissions Policy로 허용되지 않은 문서는 SecurityError를 받는다. 손으로 한 번 조작했다고 모든 삽입 페이지가 모든 권한을 얻는 것은 아니다. 브라우저가 어느 문서에 기능을 줄지 정하고, 앱은 버튼의 뜻을 정하고, 사람은 첫 행동을 한다. 한 장치에 세 종류의 결정이 겹친다.

소개 뒤에는 게임이 현재 상태를 자주 읽어야 한다. getGamepads() 배열은 연결되고 조작된 패드를 보여 주며 비어 있는 번호에는 null이 남는다. 연결 이벤트는 장치의 등장과 퇴장을 알린다. 번호는 관리용 자리라 나중에 재사용될 수 있다. 버튼과 축이 실제로 전하는 것은 점프, 회전, 브레이크, 혹은 소파에서 거실 화면을 움직이는 손짓이다. API는 동작을 전할 뿐 게임의 줄거리를 쓰지는 않는다.

W3C 발표 이력은 2012년 초안에서 2025년 버전까지 이어진다. 문서의 날짜가 모든 브라우저의 동일한 구현일을 뜻하지는 않는다. 변화의 방향은 분명하다. 웹 게임에는 풍부한 조작 신호가 필요했고, 지나가는 페이지에는 플레이어가 패드를 잡기도 전의 장비 점호가 필요 없었다.

플레이어가 버튼을 누르자 캐릭터가 움직인다. 브라우저가 문을 연 때는 손에 패드를 쥔 사람이 먼저 초인종을 눌렀을 때다.