GML 접근자 (Accessors) 설명
게임 메이커 언어(GameMaker Language, GML)는 특정 데이터 구조와 배열에 접근하기 위한 접근자(accessors)를 사용할 수 있습니다. 접근자는 데이터 구조나 배열 리터럴을 작업할 때 사용하는 구조로 설계되어 있습니다. 접근자는 다음과 같은 데이터 구조로 나뉩니다.
| 데이터 구조 | 접근자 심볼 | 문법 |
|---|---|---|
| DS 리스트 | [ | ] |
| DS 맵 | [? ] | map_index[? key] |
| DS 그리드 | [# ] | grid_index[# xpos, ypos] |
| 배열 | [@ ] | array[@ i] |
| 구조체 | [$ ] | struct[$ "name"] |
DS 리스트
ds_list의 문법은 다음과 같습니다:
||
||
리스트를 생성하고 데이터를 추가하는 예제:
ds = ds_list_create();
var index = 0;
repeat(10) {
||
||
}
리스트의 값을 얻는 방법:
||
||
DS 맵
ds_map의 문법은 다음과 같습니다:
map_index[? key]
맵을 생성하고 데이터를 추가하는 예제:
ds = ds_map_create();
ds[? "Name"] = "Hamish";
ds[? "Company"] = "MacSeweeny Games";
ds[? "Game"] = "Catch The Haggis";
맵에서 값을 얻는 방법:
value = ds[? "Name"]; // "Name" 키의 값
DS 그리드
ds_grid의 문법은 다음과 같습니다:
grid_index[# xpos, ypos]
그리드를 생성하고 값을 추가하는 예제:
ds = ds_grid_create();
ds_grid_clear(ds, 0);
var gw = ds_grid_width(ds) - 1;
var gh = ds_grid_height(ds) - 1;
repeat(10) {
var xx = irandom(gw);
var yy = irandom(gh);
if (ds[# xx, yy] == 0) {
ds[# xx, yy] = 1;
}
}
그리드에서 값을 얻는 방법:
value = ds[# mouse_x div 16, mouse_y div 16]; // 마우스 위치에 해당하는 값
배열
배열 접근자는 다음과 같습니다:
array[@ i]
배열을 생성하고 필드에 값을 추가하는 예제:
array[99] = 0;
array_populate(array);
함수에서 배열을 수정하는 예제:
function array_populate(_array) {
var a = _array;
var i = 0;
repeat(25) {
i = irandom(99);
while (a[i] != 0) {
i = irandom(99);
}
a[@ i] = 100;
}
}
구조체
구조체 접근자는 다음과 같습니다:
struct[$ "name"]
구조체에서 값을 가져오는 예제:
var _hp = struct[$ "my_health"];
구조체에 값을 설정하는 예제:
struct[$ "my_score"] = 100;
접근자 체인
여러 개의 접근자를 함께 사용하는 체인 기능이 있습니다. 이를 통해 중첩된 데이터 구조에 쉽게 접근할 수 있습니다.
예제:
// 맵의 리스트에서 그리드에 접근
||
||
// 스크립트에서 중첩된 배열에 접근
||
||
// 배열에 중첩된 맵에서 접근
||
||
체인을 사용하면 코드가 더 간결해지고, 데이터를 접근하는 방식이 더 직관적입니다.
결론
접근자는 GML에서 데이터 구조와 배열을 관리하는 매우 효과적인 방법입니다. 중첩된 구조를 효율적으로 다루고, 가독성을 높이며, 성능 오버헤드를 줄일 수 있습니다. 각 데이터 구조에 맞는 접근자를 잘 활용하면 게임 개발이 훨씬 쉬워집니다.