Appearance
第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" }
};この例では、ImageIdがImageManager::Idの別名です。 std::arrayの要素数をId::Countにそろえることで、IDと対応表の行数を一致させています。 対応表の1行は「ゲーム内の意味」と「実際のファイルパス」の組になっています。
チェックリスト
- Entityが画像パスを直接持っていない
-
Idとパスの対応表を確認できる - 読み込み失敗時に対象パスを特定できる