# tiled

tiled map editor를 사용하여 맵을 만들고, Phaser에서 사용하는 방법을 알아보자.

# tiled map editor

tiled map editor는 맵을 만들어주는 툴이다. tiled map editor에서 다운로드 받을 수 있다.

# Phaser에서 tiled map editor 사용하기

# 맵 만들기

tiled map editor를 실행하고, 새로운 맵을 선택한다. encoding은 base64(uncompression)로 설정

맵을 완성하고나면 별도로 export 할 필요는 없고 json타입으로 저장해두면 된다.

# Phaser에서 맵 사용하기

preload() {
  this.load.tilemapTiledJSON("map4", "assets/tiled/3.json");
  this.load.image("Terrian", "assets/tiled/Tile1.0.1/Terrian.png");
  this.load.image("vegetation", "assets/tiled/Tile1.0.1/vegetation.png");
  this.load.spritesheet("player", "assets/Char2/Char2_idle_16px.png", {
    frameWidth: 16,
    frameHeight: 16,
  });
  this.load.spritesheet("exit", "assets/tiled/Tile1.0.1/Dungeon.png", {
    frameWidth: 16,
    frameHeight: 16,
    startFrame: 86,
    endFrame: 86,
  });
  this.load.spritesheet("pixel_animals", "assets/pixel_animals.png", {
    frameWidth: 16,
    frameHeight: 16,
  });
}
create() {
  const map = this.make.tilemap({
    key: "map4",
  });
  const vegetationTiles = map.addTilesetImage("vegetation", "vegetation");
  const terrianTiles = map.addTilesetImage("Terrian", "Terrian");
  map.createLayer("bg", terrianTiles);

  const collision_layer = map.createLayer("bg_collision", [
    terrianTiles,
    vegetationTiles,
  ]);
  collision_layer.setCollisionByExclusion([-1]);

  const playerSpawnPoint = map.findObject("PlayerSpawn", ({ name }) => {
    return name === "PlayerSpawn1";
  });
  const exitPoint = map.findObject("Exit", ({ name }) => {
    return name === "Exit";
  });
  const duckSpawnPoints = map.filterObjects("Duck", ({ name }) => {
    return name.includes("Duck");
  });
}

json파일을 로드한다고해서 tiled 에디터에서 사용했던 이미지 바이너리가 json에 포함될리가 없으므로 같이 로드해줘야한다.

특이점으로는 this.make.tilemap 에서 key는 씬에 관계없이 고유한 값이어야한다.