GAME MAKER 강좌
KAYAN
이번 강좌에서는 코드로 타일을 배치하는 방법에 대해 알아보도록 합시다.
(▲ 코드로 타일 배치)
◈ 타일 레이어에 타일셋이 지정되어 있는 경우
예를 들어 아래와 같은 타일이 있다고 해봅시다.
(▲ 타일 이미지)
먼저 룸에 생성된 타일레이어에 타일셋을 지정해야 합니다.
(▲ 타일 레이어에 타일셋을 지정)
타일레이어의 이름이 "Tile_1"이라고 합시다.
그러면 먼저 타일레이어의 ID를 알아야 합니다.
다음은 타일 레이어에 지정되어 있는 우리가 편집하게 될 타일맵 ID를 가지고 와야 합니다.
◎ layer_get_id(layer_name) : 레이어 ID 반환
◎ layer_tilemap_get_id(layer_id) : 타일맵 ID 반환
이것을 코드로 하면 아래와 같습니다.
//레이어에 타일셋이 지정되어 있는 경우(타일레이어에 타일셋이 지정되어있어야 함.) var layer_id = layer_get_id("Tiles_1"); var map_id = layer_tilemap_get_id(layer_id); |
여기까지하면 타일을 배치할 준비가 된 것입니다.
다음은 타일을 배치하는 2가지 방식이 있는데, 첫번째는 룸의 픽셀로 배치하는 방법이 있고,
두번째는 셀로 배치하는 방법이 있습니다.
◎ tilemap_set_at_pixel(tilemap_element_id, tiledata, x, y) : 픽셀로 배치
◎ tilemap_set(tilemap_element_id, tiledata, xcell, ycell) : 셀로 배치
tilemap_element_id은 타일맵 ID를 지정합니다.
tiledata 는 배치할 타일의 번호를 말합니다. 아래와 같이 첫번째 타일 0번부터 시작합니다.
(▲ 타일 번호)
0번은 지정되지 않은 번호로 타일을 클리어할 때 사용합니다.
그리고 룸에 배치할 때 타일에 설정된 크기로 무조건 격자(Grid)식 배치가 됩니다.
먼저 픽셀로 배치하는 방법입니다.
◎ tilemap_set_at_pixel(tilemap_element_id, tiledata, x, y)
예를 들어 10번의 타일을 (320,240)에 배치한다고 했을 때,
var layer_id = layer_get_id("Tiles_1"); var map_id = layer_tilemap_get_id(layer_id); tilemap_set_at_pixel(map_id, 10, 320, 240); |
이와 같이 합니다.
배치 좌표는 타일 셀 크기에 맞는 격자 위치에 자동으로 조정됩니다.
두번째로 셀로 배치하는 방법에 대해 알아봅시다.
셀로 배치하는 것은 아래의 함수를 사용할 수 있습니다.
◎ tilemap_set(tilemap_element_id, tiledata, xcell, ycell) : 셀로 배치
셀의 위치는 룸을 타일 크기만큼 격자(Grid)식으로 변환했을 때의 위치를 사용합니다.
예를 들어 타일 셀의 크기가 32x48 이라 했을 때,
◎ xcell = floor(x / 32) * 32;//x셀
◎ ycell = floor(y / 48) * 48;//y셀
이와 같이 반환하여 사용할 수 있습니다.
또는 아래의 함수로 현재 좌표를 셀로 반환하여 사용할 수도 있습니다.
◎ tilemap_get_cell_x_at_pixel(tilemap_element_id, x, y)
◎ tilemap_get_cell_y_at_pixel(tilemap_element_id, x, y)
이것을 사용하여 15번의 타일을 (480,160)에 배치한다고 했을 때,
var layer_id = layer_get_id("Tiles_1"); var map_id = layer_tilemap_get_id(layer_id); tmx = tilemap_get_cell_x_at_pixel(map_id, 480, 160);//룸 좌표를 cell 단위로 변환 tmy = tilemap_get_cell_y_at_pixel(map_id, 480, 160);//룸 좌표를 cell 단위로 변환 tilemap_set(map_id, 15, tmx, tmy); |
이와 같이 할 수 있습니다. 간단하죠.
배치된 타일을 삭제할 때는, 단순히 0번을 배치하면 삭제된 것 처럼 처리됩니다.
참고로 빈 타일 맵(타일이 전혀 배치되지 않은 경우)은 0번으로 클리어 된 상태입니다.
타일레이어에 지정된 타일 셋을 교체하고자 할 때는 아래의 함수를 사용하여 변경할 수 있습니다.
◎ tilemap_tileset(tilemap_element_id, tileset_index)
예)
var layer_id = layer_get_id("Tiles_1"); var map_id = layer_tilemap_get_id(layer_id); tilemap_tileset(map_id, TileSet2); |
룸에 배치된 타일 번호를 알고 싶을 때는 아래의 함수를 사용합니다.
◎ tilemap_get_at_pixel(tilemap_element_id, x, y) : 룸에 배치된 타일 번호를 반환함.
예)
var layer_id = layer_get_id("Tiles_1"); var map_id = layer_tilemap_get_id(layer_id); tile_id = tilemap_get_at_pixel(map_id, x, y); |
- 계속 -
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 코드로 타일 배치-3 : 레이어에서 타일맵 찾기 (0) | 2021.02.16 |
---|---|
[게임메이커 강좌-기초][GMS2] 코드로 타일 배치-2 : 새 레이어 사용 (0) | 2021.02.15 |
[게임메이커 강좌-기초][GMS2] 가상 키-2-가상 키 구성 (0) | 2021.01.17 |
[게임메이커 강좌-기초][GMS2] 가상 키-1-마우스 클릭 또는 화면 터치 (1) | 2021.01.16 |
[게임메이커 강좌-기초][GMS2]프리미티브(Primitive) 종류 - 텍스쳐 매핑 2 (0) | 2019.04.03 |
댓글