This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this tutorial in English
エディターから開くか、GitHub からダウンロードできるこのサンプルプロジェクトでは、Defold で非常に大きな RPG マップを作成する方法の1つを紹介します。この設計は、次の前提に基づいています。
まずサンプルを実行し、3x3画面分の広さのワールドを歩き回って、サンプルの構成をつかみましょう。キャラクターは矢印キーで操作します。
“/main/main.collection” を開いて、このサンプルで起動時に読み込まれるコレクション(collection)である、ブートストラップコレクション(bootstrap collection)を確認します。

メインコレクションには、矢印キーで8方向に操作するプレイヤーキャラクターのゲームオブジェクト(game object)と、ゲームの進行を制御する “game” という2つ目のゲームオブジェクトが含まれています。”game” オブジェクトは、スクリプト(script)と、ゲーム内の各画面に1つずつ用意したコレクションファクトリー(collection factory)で構成されています。ファクトリーには、画面のグリッドの命名規則に従って名前が付けられています。
スクリプト “/main/game.script” は、プレイヤーが現在どの画面にいるかを追跡します。また、”load_screen” というカスタムメッセージにも反応します。このメッセージは新しい画面を読み込み、主人公が移動する方向に現在の画面と入れ替えます。初期状態では、1つの画面が表示領域の中央に読み込まれ、位置を入れ替える相手の画面はありません。
主人公はスクリプト “/main/hero.script” で制御します。このスクリプトは、主人公のゲームオブジェクトが、画面の端に近い上下左右の境界線を越えたかどうかを確認します。

factory.create() を呼び出して、次の画面のコレクションを生成します。コレクションの内容は画面外に配置します。これらすべてが1秒以内に行われるため、切り替えは滑らかで、プレイを妨げません。
ゲームワールドの各画面は、それぞれ独立したコレクション内に構築されます。コレクションには、その画面固有のタイルマップ、衝突判定や物理特性を持つコリジョンオブジェクト(collision object)、その他のゲームオブジェクトが含まれます。画面の管理と読み込みを容易にするため、画面のコレクションには簡単な規則に従って名前を付けています。

各画面のコレクションは、ワールドのグリッド内での位置に従って名前を付けます。最初の数字はグリッドの X 位置で、2つ目の数字は Y 位置です。
Assets ビューで、マップの左下隅にある画面を定義するコレクション “/main/screens/0-0.collection” に移動して開きます。

“root” という名前のゲームオブジェクトがあり、画面内のすべてのコンテンツの親になっていることに注目してください。これもこのサンプルで使っている規則で、非常に重要な役割があります。画面を表示領域に移動するときは、”root” ゲームオブジェクトだけを動かせばよいのです。すべての子オブジェクトは、親であるルートとともに自動的に移動します。画面に特別なゲームオブジェクトがある場合も、その移動は親であるルートを基準とするため、自由にアニメーションさせられます。画面がスクロールして入ってくるときや出ていくときに、これらの子オブジェクトも画面とともに移動します。特別なコードが必要になるのは、オブジェクトが画面間を移動する必要がある場合だけです。
画面 0-1 の蜂は、この考え方を示す簡単な例です。

各画面には独自のタイルマップがあり、組み込みのタイルマップエディターで編集できます。ただし、各画面を個別に編集する方法の大きな欠点は、隣接する画面とどのようにつながるかを簡単には確認できないことです。このつながりは、ゲームワールド全体の連続性を作るうえで重要です。
そのため、専用のコレクションを作成しました。”/main/map/test_layout.collection” を開いて、このワールドのテストレイアウト用コレクションを確認します。

このコレクションの唯一の目的は、開発中の編集ツールとして使うことです。特定の画面をテストレイアウト用コレクションと並べて編集すると、作業中の画面と周囲とのつながりが分かり、編集がずっと快適になります。

画面のタイルマップ(ここでは右側のペイン)への編集は、テスト用コレクション(左側のペイン)に即座に反映されます。また、テストレイアウト用コレクションは静的な階層に追加されていないため、すべてのビルドから自動的に除外されることにも注目してください。
ここまで見てきたように、このサンプルは、ゲームワールドと、その中を主人公がどのように移動するかに関する特定の制約に従って構築されています。ゲームの要件が異なる場合は、おそらく別の解決策を見つける必要があります。たとえば、ワールドマップ上でカメラを継ぎ目なく移動させる必要があるゲームでは、コンテンツを分割する方法も、読み込みの仕組みも、ゲームワールドの制作を支援するツールも変える必要があります。
これで RPG マップサンプルの解説は終わりです。いつものように、サンプルのコンテンツは、目的に合わせて自由に利用できます。Defold について詳しく知るには、ドキュメントのページで、ほかのサンプル、チュートリアル、マニュアル、API ドキュメントを確認してください。
問題が発生した場合や質問がある場合は、フォーラムをご利用ください。
Defold での開発を楽しんでください!