디버깅
게임을 만들 때, 특정 시점에서 게임 메커니즘의 세부 사항을 알거나, 게임의 다양한 방법과 아이디어를 테스트하기 위해 특정 키 값을 입력할 수 있는 것이 매우 중요합니다. GameMaker는 다음과 같은 기능을 제공합니다:
- 기본 디버그 함수: 디버그 모드(또는 Windows 타겟)에서 메시지를 표시하고 입력을 요청하는 기본 디버그 함수입니다. 이 함수들은 입력이 해결될 때까지 게임을 닫힌 루프 상태로 두기 때문에 다른 타겟 모듈로 컴파일할 때는 무시됩니다.
- 디버그 오버레이: FPS, 로그 및 오디오 창을 볼 수 있는 인게임 오버레이로, 사용자 정의 디버그 뷰를 생성할 수 있습니다. 특정 플랫폼에서 작동할 수 있지만 디버깅 외의 용도로 사용해서는 안 됩니다.
게임을 디버깅하는 방법에 대한 추가 정보는 디버거 섹션에서 확인할 수 있습니다.
기본 디버그 함수
다음 함수들은 게임을 디버깅하는 기본 기능을 제공합니다:
함수 이름 | 설명 |
---|---|
debug_mode | 디버그 모드 활성화 |
debug_event | 디버그 이벤트 처리 |
debug_get_callstack | 호출 스택 가져오기 |
exception_unhandled_handler | 처리되지 않은 예외 핸들러 |
get_integer | 정수 입력 받기 |
get_string | 문자열 입력 받기 |
show_errors | 오류 메시지 표시 |
show_messages | 메시지 표시 |
show_questions | 질문 표시 |
show_debug_messages | 디버그 메시지 표시 |
show_debug_message_ext | 확장된 디버그 메시지 표시 |
show_debug_overlay | 디버그 오버레이 표시 |
code_is_compiled | 코드가 컴파일되었는지 확인 |
fps | 초당 프레임 수 |
fps_real | 실제 초당 프레임 수 |
디버그 오버레이
GameMaker는 디버그 오버레이를 통해 더 고급 디버깅 기능을 제공합니다.
디버그 매크로
GameMaker는 게임 디버깅을 쉽게 할 수 있도록 몇 가지 내장 매크로를 제공합니다:
매크로 이름 | 설명 |
---|---|
GMLINE | 스크립트 편집기에서 보여지는 줄 번호 |
GMFILE | 현재 코드 파일의 이름 |
GMFUNCTION | 현재 매크로가 사용되는 가장 안쪽 함수의 이름 |
위 스크린샷의 디버그 출력은 다음과 같습니다:
gml_GlobalScript_Macros3
show_macros
gml_GlobalScript_Macros10
gml_GlobalScript_Macros
오류 메시지
GameMaker는 게임 코드 작성, 컴파일 또는 실행 중에 표시될 수 있는 긴 오류 메시지 목록을 가지고 있습니다. 이러한 메시지는 특정 오류를 가리키며, 특정 객체나 스크립트 함수 내의 문제를 파악하는 데 도움이 됩니다. 그러나 오류 메시지가 정확히 무엇을 의미하는지 항상 명확하지 않을 수 있으므로, 다음 섹션에서는 가능한 모든 메시지를 나열하고 그 의미를 설명하여 여러분의 작업을 쉽게 만들어 줍니다:
오류 유형 | 설명 |
---|---|
구문 오류 | 코드의 문법적 오류 |
컴파일 오류 | 컴파일 중 발생한 오류 |
실행 오류 | 게임 실행 중 발생한 오류 |
활용 예제
디버깅을 위한 다양한 활용 예제는 다음과 같습니다:
// 디버그 모드 활성화
debug_mode(true);
// 특정 값 입력 받기
var player_health = get_integer("플레이어의 체력을 입력하세요:", 100);
// FPS 출력
show_debug_messages(fps);
// 사용자 정의 디버그 메시지 표시
show_debug_message("게임이 시작되었습니다!");
// 호출 스택 확인
var call_stack = debug_get_callstack();
// 오류 발생 시 예외 처리
try {
// 코드 실행
} catch (exception) {
exception_unhandled_handler(exception);
}
// 디버그 오버레이 표시
show_debug_overlay(true);
// 특정 조건에서 오류 메시지 표시
if (player_health < 0) {
show_errors("플레이어의 체력이 0 이하입니다!");
}