1. Tiledの使い方
はじめに
ヴァンサバ風ゲームが一段落したので、次はTowerDefenseを作っていきます。
まず、Tiledでステージマップを作成します。
レイヤー
以下のようなレイヤーを作成すると何かと便利です。
- 地面(Groud)・・・地面
- 障害物(Obstacles)・・・通り抜けできないもの、キャラの上に表示するもの(壁、柱、壺など)
- 通行不可(Collision)・・・通行不可のタイルを指定
- 位置情報(Points)・・・スポーン位置やゴール位置など
位置情報はオブジェクトレイヤー、残りはタイルレイヤーで作成します。
通行不可
通行不可の指定は専用タイル画像を用意して、
すべての敵が通行不可(all)、地面を歩く敵が通行不可(ground)
などで色分けしておきます。
カスタムプロパティで、{collision: all} のように設定しておきます。
位置情報
位置情報は、Pointを追加して、nameにspawn1,goal1などと指定しておきます。
タイル境界を自動で描画
水場と陸地、石畳と土のように、2種類のタイルの境界を自動で塗り分ける機能です。 (まだいまいちよくわからない。。。)
- タイルセットを編集をクリック
- Terrain SetsのNew Corner Setをクリック
- 地形を追加する(赤と緑)
- タイルを赤と緑で塗っていく
- Terrain Brushで塗ると自動で境界ができる
Phaserから読み込み
preloadでタイル画像とTiledでエクスポートしたJSONを読み込みます。
preload(){
this.load.image("tiles", "assets/tilesets/dungeon.png");
this.load.tilemapTiledJSON("stage1", "assets/maps/stage1.json");
}createで以下の処理をします。
// マップレイヤーを表示
const map = this.make.tilemap({ key: "stage1" });
const tileset = map.addTilesetImage("dungeon", "tiles");
map.createLayer("Ground", tileset!, 0, 0);
map.createLayer("Obstacles", tileset!, 0, 0);
// Mapのコリジョン設定(matter)
const collisionLayer = map.createLayer("Collision", tileset!, 0, 0);
collisionLayer!.setCollisionByProperty({ collision: ["all", "ground"] });
this.matter.world.convertTilemapLayer(collisionLayer!, { isStatic: true, label: "terrain" });
this.matter.world.createDebugGraphic(); // デバッグ用
this.matter.world.setBounds(0, 0, map.widthInPixels, map.heightInPixels);
// ゴールとスポーンポイントを取得
const spawn1 = map.getObjectLayer("Points")?.objects.find((point) => point.name === "spawn1")!;
const goal1 = map.getObjectLayer("Points")?.objects.find((point) => point.name === "goal1")!;
const spawnPoint = { x: spawn1.x!, y: spawn1.y! };
const goalPoint = { x: goal1.x!, y: goal1.y! };まとめ
Tiledの使い方を解説しました。



