본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 코드로 타일 배치-1 : 기본 타일 레이어 사용

by 타락카얀 2021. 2. 15.
728x90

 

 

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);

 

 

 

- 계속 -

 

 

 

 

 

 

300x250

댓글