입력 정의하기
입력은 롤백 시스템에 의해 관리되므로, 플레이어 간에 적절하게 동기화될 수 있습니다. 플레이어의 입력은 rollback_get_input()
함수를 사용하여 가져올 수 있으며, 이 함수는 플레이어의 입력을 포함하는 구조체를 반환합니다.
기본 입력
기본적으로 입력 구조체에서 다음과 같은 키를 얻습니다:
키 | 설명 |
---|---|
left | 왼쪽 방향키 |
right | 오른쪽 방향키 |
up | 위쪽 방향키 |
down | 아래쪽 방향키 |
Z | Z 키 |
X | X 키 |
C | C 키 |
space | 스페이스 바 |
방향 입력은 화살표 키에 매핑됩니다.
입력 변형
정의된 각 키보드 입력은 keyboard_check()
를 사용하여 읽어들입니다. 마우스 입력은 mouse_check_button()
을 사용합니다. 각 정의된 입력(기본 또는 사용자 정의)에 대해 keyboard_check_pressed()
및 keyboard_check_released()
와 같은 변형도 제공됩니다. 이들은 각각 "_pressed" 및 "_released" 접미사가 붙습니다.
예를 들어, space
입력에 대해서는 space_pressed
와 space_released
를 얻을 수 있습니다.
사용자 정의 컨트롤 정의하기
자신의 입력을 정의하려면, 입력 키와 사용할 상수를 포함하는 구조체를 생성한 후, 이를 rollback_define_input()
에 전달합니다. 이렇게 하면 페이지 상단에 언급된 기본 컨트롤이 덮어씌워집니다.
입력 이름은 왼쪽에 정의하고(예: fire
), 오른쪽에 입력을 할당합니다(예: mb_left
).
// 롤백 게임 시작 전
rollback_define_input({
fire: mb_left,
interact: vk_space,
left: ord("A"),
right: ord("D")
});
이제 rollback_get_input()
을 호출하면 여기에서 정의한 입력(예: fire
, interact
등)과 각 입력에 대한 _pressed 및 _released 변형만 반환됩니다.
GML 비주얼에서는 "Define Input (Rollback)"를 사용합니다.
상수
구조체의 입력에 다음 입력 값을 할당할 수 있습니다:
입력 유형 | 값 | 설명 |
---|---|---|
키보드 | vk_* 상수 | 키보드 키를 정의하는 데 사용합니다. |
ord("") | 문자 키를 정의할 때 사용합니다. | |
게임패드 | gp_* 상수 | 게임패드 입력(버튼 및 축)을 정의하는 데 사용합니다. |
마우스 | mb_* 상수 | 마우스 버튼을 정의하는 데 사용합니다. |
m_axisx | 방 안에서 마우스의 X 위치 (mouse_x 사용) | |
m_axisy | 방 안에서 마우스의 Y 위치 (mouse_y 사용) | |
m_axisx_gui | GUI 레이어에서 마우스의 X 위치 (device_mouse_x_to_gui() 사용) | |
m_axisy_gui | GUI 레이어에서 마우스의 Y 위치 (device_mouse_y_to_gui() 사용) | |
m_scroll_up | 마우스 휠이 위로 스크롤되면 1, 아니면 0 | |
m_scroll_down | 마우스 휠이 아래로 스크롤되면 1, 아니면 0 |
참고: mb_any
와 mb_none
은 사용할 수 없습니다.
다중 컨트롤
각 입력에 여러 개의 컨트롤을 배열로 나열하여 할당할 수 있습니다:
rollback_define_input({
fire: [mb_left, ord("X")],
interact: [vk_space, ord("C")],
left: [ord("A"), vk_left],
right: [ord("D"), vk_right]
});
이 예제에서 fire
는 mb_left
와 X
키 모두에 의해 트리거됩니다. interact
는 vk_space
와 C
키에 의해 트리거됩니다.
var _input = rollback_get_input();
if (_input.fire) {
// LMB 또는 X가 눌렸을 때 실행됩니다.
}
참고: 동일한 입력 상수를 여러 입력에 바인딩할 수 없습니다. 예를 들어, 특정 입력 값(예: mb_left
또는 ord("A")
)은 전체 입력 구조체에서 한 번만 사용할 수 있습니다.
모의 입력
로컬에서 테스트할 때, 원격 플레이어를 위한 임시 입력을 정의하여 멀티플레이어 게임플레이를 오프라인으로 테스트할 수 있습니다. 이를 위해 rollback_define_mock_input()
을 사용하여 플레이어에 대한 모의 입력을 정의할 수 있습니다.
예를 들어, 위의 코드 스니펫을 호출하여 모든 플레이어에 대한 fire
, interact
, left
, right
입력을 정의한 후, 두 번째 플레이어에 대해 별도의 입력 세트를 정의할 수 있습니다.
rollback_define_mock_input(1, {
fire: vk_control,
interact: vk_shift,
left: ord("J"),
right: ord("L")
});
이렇게 하면 두 번째 플레이어(플레이어 1)에 대한 모의 입력이 정의되며, 동일한 입력 이름을 유지하면서 다른 입력을 할당합니다. 이렇게 하면 두 사람이 동일한 컴퓨터에서 로컬로 게임을 플레이할 수 있습니다.
추가 자료
롤백 시스템에 대한 더 많은 정보는 다음 페이지를 참조하세요:
- 롤백 제약
- 롤백 이벤트
- 멀티플레이어 게임 만들기
- 롤백 시스템