Skip to content
第24回 地形の種類追加と作品の完成

1 / 4 地形の種類を追加する ​

このステップの目的

独自に用意した地形画像を識別子・セル列挙型・タイル定義表・CSVファイルへと一貫して登録し、既存の描画や物理判定コードを変更することなく新ブロックを追加する手順を実践します。

既存の地形定義を使う ​

この回では、画像・数値ID・地形の属性を対応付けて石ブロックを追加します。既存のタイルと同じ属性を持つため、描画や衝突判定の関数を共通に使えます。

新しい地形(石ブロック Stone)の追加手順 ​

ここでは、新しい通常地形ブロック「石(Stone)」を追加する具体的な4つのステップを解説します。

ステップ1: 画像ファイルの配置とリソース登録 ​

  1. 画像ファイル(例: TileStone.png)を Assets/Images/ ディレクトリへ配置します。
  2. ImageManager.h の ImageId 列挙型に TileStone を追加します。
  3. 列挙型を保存してから、ImageManager.cpp の imageDefinitions 配列で TileMoss の行の下へ画像を登録します。
cpp
// ImageManager.h
enum class ImageId
{
    // ...
    Tile,
    TileMoss,
    TileStone, // 追加
    // ...
    Count
};
ImageManager.cpp(imageDefinitionsへ追加)cpp
{ ImageId::TileMoss, L"Assets/Images/TileMoss.png" },
{ ImageId::TileStone, L"Assets/Images/TileStone.png" },

ステップ2: セル列挙型への登録 ​

CSVファイル上で使用する数値IDを決め、Stage.h の StageCell 列挙型に対応する名前を定義します。ここでは通常地形の空き番号である 12 を割り当てます。

cpp
enum class StageCell : int
{
    Empty = 0,
    Goal = 1,
    PlayerSpawn = 2,
    Brick = 10,
    Moss = 11,
    Stone = 12, // 追加
    Spike = 20,
    EnemySpawn = 90
};

ステップ3: タイル属性テーブルへの定義追加 ​

Stage.cpp の tileDefinitions 配列に、StageCell::Stone の行を追加します。石ブロックは足場となる通常地形であるため、isSolid = true、isHazard = false を指定します。配列を閉じる }; の直前へ追加し、直前の要素に区切りのカンマがあることを確認してください。

cpp
{ StageCell::Stone, ImageId::TileStone, true, false,
  { 0.0f, 0.0f, TileWorldSize, TileWorldSize }, {} },
};

ステップ4: CSVマップファイルへの配置 ​

テキストエディタで Assets/Maps/Stage01.csv を開き、配置したいマスの数値を 12 に変更します。

TileDefinitionの要素は、cell、imageId、isSolid、isHazard、drawRect、hazardRectの順です。石は固い地形で、危険判定は持たないため最後は空の矩形にします。

動作確認と検証 ​

ゲームを起動し、新しく配置した石ブロックが正しく描画されていることを確認します。さらに、F1キーを押してデバッグ表示を有効化し、以下の点を確認します:

  • 新しいブロックの周囲に青色の進入不可枠(Solid判定)が表示されているか
  • プレイヤーが問題なく石ブロックの上に着地して歩行できるか
  • 壁として接触した際に正しく横方向の押し戻しが働くか
チェックリスト
  • 画像登録、列挙型定義、タイル属性定義、CSV配置の4段階の追加フローを説明できる
  • 既存の描画処理や衝突判定関数に手を加えることなく新ブロックを追加できる
  • F1デバッグ表示を用いて、追加したブロックに意図通りの当たり判定が付与されていることを検証できる

ゲームプログラミング実践