게임패드 매핑 테스트
이 문서는 게임패드 매핑을 설정하는 방법에 대해 설명합니다. 특정 타겟에서 게임패드 매핑을 설정할 수 있으며, 이를 위해 "슬롯" 인덱스와 매핑 문자열을 제공합니다. 매핑 문자열은 SDL 형식으로 생성되어야 하며, 다음과 같은 필드를 포함해야 합니다:
- guid: 장치 유형을 고유하게 식별하는 숫자와 문자로 이루어진 문자열 (gamepad_get_guid() 함수를 사용하여 가져올 수 있음)
- description: 장치에 대한 ASCII 설명 (gamepad_get_description() 함수를 사용하여 가져올 수 있음)
- platform-name: "platform:android", "platform:windows", "linux", 또는 "mac" 중 하나 (이 값은 자동으로 문자열에 추가되므로 직접 제공할 필요 없음)
- bindings: 실제 입력을 특정 GML 상수에 바인딩하는 항목의 집합 (','로 구분)
각 항목은 다음과 같은 형식을 따릅니다:
<abstract-gp-name>:<value-binding>
여기서 <value-binding>
은 다음 중 하나일 수 있습니다: - a<N>
: 게임패드의 축을 나타내며, <N>
은 0부터 gamepad_axis_count()-1까지의 값 - b<N>
: 게임패드의 버튼을 나타내며, <N>
은 0부터 gamepad_button_count()-1까지의 값 - h<N>.<mask>
: 게임패드의 해트를 나타내며, <N>
은 0부터 gamepad_hat_count()-1까지의 값이고, <mask>
는 1, 2, 4, 또는 8 중 하나
각 입력 값은 SDL 이름에 바인딩되며, 이는 GML 상수에 바인딩됩니다. 아래 표는 SDL 이름과 GameMaker 상수 간의 대응 관계를 보여줍니다:
SDL Name | GML Name |
---|---|
agp_face1 | gp_face1 |
bgp_face2 | gp_face2 |
xgp_face3 | gp_face3 |
ygp_face4 | gp_face4 |
leftshoulder | gp_shoulderl |
lefttrigger | gp_shoulderl |
brightshoulder | gp_shoulderr |
righttrigger | gp_shoulderr |
guide | gp_select |
start | gp_start |
leftstick | gp_stickl |
rightstick | gp_stickr |
dpup | gp_padup |
dpdown | gp_paddown |
dpleft | gp_padleft |
dpright | gp_padright |
leftx | gp_axislh |
lefty | gp_axislv |
rightx | gp_axisr |
righty | gp_axisrv |
매핑 문자열을 구성한 후, 다음과 같은 형식이 됩니다:
"050000005e040000fd020000ffff3f00,Xbox Wireless Controller,a:b0,b:b1,start:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:android"
문법
gamepad_test_mapping(index, mapping_string);
인수
인수 | 유형 | 설명 |
---|---|---|
index | Real | 설정할 게임패드 인덱스 "슬롯" |
mapping_string | String | 사용할 매핑 문자열 |
반환값
N/A
예제
var mapping = gamepad_get_guid(global.padIndex) + "," + gamepad_get_description(global.padIndex);
var len = array_length(global.PadInstances);
for (i = 0; i < len; i += 2) {
var left = global.PadInstances[i];
var right = global.PadInstances[i + 1];
mapping += "," + left.sdlLabel + ":" + right.binding;
}
gamepad_test_mapping(global.padIndex, mapping);
위 코드는 여러 인스턴스를 반복하여 그들이 포함하고 있는 다양한 변수의 값을 사용하여 매핑 문자열을 생성하고, 이를 지정된 슬롯 인덱스의 게임패드에 설정합니다.
활용 예제
// 게임패드 매핑 설정 예제
var mapping1 = "050000005e040000fd020000ffff3f00,Xbox Controller,a:b0,b:b1,platform:windows";
gamepad_test_mapping(0, mapping1);
var mapping2 = "050000005e040000fd020000ffff3f01,PS4 Controller,a:b0,b:b1,platform:android";
gamepad_test_mapping(1, mapping2);
// 여러 게임패드에 대한 매핑 설정
for (var i = 0; i < 2; i++) {
var mapping = gamepad_get_guid(i) + "," + gamepad_get_description(i);
gamepad_test_mapping(i, mapping);
}