Skip to content
第08回 画像リソースの管理

1 / 4 画像の識別と対応表を読む

このステップの目的

ゲーム内の画像IDと外部ファイルのパスが対応表で結び付いていることを理解する

Idで画像を指定する

ゲームのクラスはAssets/Images/Player.pngのようなパスを直接持たず、ImageManager::Idを渡します。 パスを知っているのはManager内部の対応表です。

ImageManager.hcpp
enum class Id
{
    Player,
    PlayerShot,
    Enemy,
    EnemyShot,
    Background,
    Count
};

IDとパスを分けることで、ファイル名を変更する場合も、読み込み側のEntityを変更せずに済みます。

対応表を走査する

LoadAll()は対応表の各行を順番に読み込みます。 どれか1つでも失敗したら、対象パスを返してゲーム開始を止めます。

ImageManager.cppcpp
using ImageId = ImageManager::Id;

struct ImageEntry
{
    ImageId id;
    const wchar_t* path;
};

constexpr std::array<ImageEntry, static_cast<std::size_t>(ImageId::Count)> ImageTable =
{
    ImageEntry { ImageId::Player, L"Assets/Images/Player.png" },
    ImageEntry { ImageId::PlayerShot, L"Assets/Images/Bullet.png" },
    ImageEntry { ImageId::Enemy, L"Assets/Images/Enemy.png" },
    ImageEntry { ImageId::EnemyShot, L"Assets/Images/EnemyShot.png" },
    ImageEntry { ImageId::Background, L"Assets/Images/Background.png" }
};

この例では、ImageIdImageManager::Idの別名です。 std::arrayの要素数をId::Countにそろえることで、IDと対応表の行数を一致させています。 対応表の1行は「ゲーム内の意味」と「実際のファイルパス」の組になっています。

チェックリスト
  • Entityが画像パスを直接持っていない
  • Idとパスの対応表を確認できる
  • 読み込み失敗時に対象パスを特定できる