방(Room) 관리
게임에서 모든 것이 발생하는 곳은 방입니다. 방은 IDE의 방 편집기에서 생성하거나, 실행 중에 방을 수정하는 함수들을 사용하여 생성할 수 있습니다. 모든 GameMaker 게임은 실행되기 위해 최소한 하나의 방이 필요하지만, 게임의 종류와 프로젝트 구조에 따라 더 많은 방이 필요할 수 있습니다. 기본적으로 새 GameMaker 프로젝트에는 하나의 방이 추가됩니다.
방 관련 GML 함수 및 변수
이 섹션에서는 방에 대한 정보를 얻고 특정 속성을 설정하는 데 사용할 수 있는 일반적인 GML 함수와 변수를 다룹니다.
전역 변수 및 함수
다음의 전역 변수와 함수를 사용하여 특정 방에 대한 기본 정보를 얻을 수 있습니다:
| 변수/함수 이름 | 설명 |
|---|---|
| room_first | 첫 번째 방을 반환합니다. |
| room_last | 마지막 방을 반환합니다. |
| room_next | 다음 방을 반환합니다. |
| room_previous | 이전 방을 반환합니다. |
| room_speed | 방의 속도를 설정합니다. |
| room_height | 방의 높이를 반환합니다. |
| room_width | 방의 너비를 반환합니다. |
| room_persistent | 방이 지속적인지 여부를 반환합니다. |
위의 변수들은 스크립트에서 유효하지 않습니다. 스크립트는 첫 번째 방이 로드되기 전에 실행되기 때문입니다. 이는 스크립트의 루트에 작성된 코드에만 해당되며, 스크립트 내부에서 생성된 함수는 게임 중 언제든지 실행될 수 있습니다.
방 정보 얻기
다음의 함수를 사용하여 방이 존재하는지 확인하고, 방의 이름(자산 브라우저에서 정의된 대로) 및 일반 정보를 얻을 수 있습니다:
| 함수 이름 | 설명 |
|---|---|
| room_exists | 방이 존재하는지 확인합니다. |
| room_get_name | 방의 이름을 반환합니다. |
| room_get_info | 방에 대한 일반 정보를 반환합니다. |
방 전환
방을 전환하는 데 사용할 수 있는 함수는 다음과 같습니다:
| 함수 이름 | 설명 |
|---|---|
| room_go | 특정 방으로 이동합니다. |
| room_goto_next | 다음 방으로 이동합니다. |
| room_goto_previous | 이전 방으로 이동합니다. |
| room_restart | 현재 방을 재시작합니다. |
방 수정
방을 수정하는 함수는 다음과 같습니다. 이 함수들은 변경하려는 방 내에서 실행해서는 안 되며, 다른 방의 인스턴스에서 먼저 실행해야 합니다. 이렇게 방 자산을 변경하면 변경 사항이 영구적이며, 게임의 전체 기간 동안 유지됩니다. 단, room_restart 함수를 호출하면 방 속성이 초기화됩니다.
| 함수 이름 | 설명 |
|---|---|
| room_add | 방을 추가합니다. |
| room_duplicate | 방을 복제합니다. |
| room_assign | 방을 할당합니다. |
| room_instance_add | 인스턴스를 방에 추가합니다. |
| room_instance_clear | 방의 인스턴스를 지웁니다. |
| room_set_height | 방의 높이를 설정합니다. |
| room_set_width | 방의 너비를 설정합니다. |
| room_set_persistent | 방의 지속성을 설정합니다. |
| room_set_view_enabled | 방의 뷰를 활성화합니다. |
| room_set_viewport | 방의 뷰포트를 설정합니다. |
| room_get_viewport | 방의 뷰포트를 반환합니다. |
| room_set_camera | 방의 카메라를 설정합니다. |
| room_get_camera | 방의 카메라를 반환합니다. |
레이어 및 요소
방의 레이어에는 여러 가지 다른 요소 유형을 포함할 수 있습니다. 예를 들어, 적을 위한 레이어를 만들고 그 레이어에 적 인스턴스와 특정 스프라이트 자산을 포함할 수 있습니다. 또는 배경 요소와 타일 맵 요소를 결합하여 방의 모양을 만들 수 있습니다. 이는 방 편집기에서는 허용되지 않지만, 동적으로 생성할 때는 가능하므로 layer_get_all_elements와 같은 함수가 존재합니다.
활용 예제
다음은 방을 관리하는 데 유용한 몇 가지 코드 스니펫입니다:
// 방이 존재하는지 확인하고 이름을 출력
if (room_exists(room1)) {
show_message(room_get_name(room1));
}
// 다음 방으로 이동
room_goto_next();
// 방의 크기 설정
room_set_width(800);
room_set_height(600);
// 방 복제
var new_room = room_duplicate(room1);
// 인스턴스 추가
room_instance_add(room1, obj_enemy, x, y);
// 방의 카메라 설정
room_set_camera(camera1);
// 방의 뷰포트 설정
room_set_viewport(viewport1);
// 방의 지속성 설정
room_set_persistent(true);
// 방을 재시작
room_restart();
// 이전 방으로 이동
room_goto_previous();
이러한 예제들은 방을 효과적으로 관리하고 조작하는 데 도움이 됩니다.