Appearance
第08回 画像リソースの管理
第01回から、ゲーム内の画像はImageManagerを通して表示してきました。 今回は、画像がどこで読み込まれ、誰が所有し、いつ解放されるのかを確認します。
画像を直接扱うクラスを増やすのではなく、既存のManagerがなぜ必要だったのかを整理します。
配布プロジェクト
前回の作業が完了した状態と同等のプロジェクトを配布します。 第08回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。
この回のゴール
授業終了時には、画像をIDから読み込み、ImageManagerが所有する流れを説明できるようにします。
- 画像ハンドルを
ImageManagerが所有する理由を説明する Idとパスの対応表から複数の画像を読み込む流れを追う- 読み込み失敗と解放の責任をManagerへ集約する
- 画像を差し替えても表示矩形と命中矩形を維持する
今回のポイント
画像のハンドルを各Entityが直接持つと、読み込みや解放の責任がそれぞれのクラスへ分かれてしまいます。 そこで、ImageManagerがハンドルをまとめて所有し、画像IDとパスの対応表を使って管理します。
新しい画像読み込み方式へ置き換えるのではなく、第01回から使ってきたLoadAll()、Draw()、デストラクタの関係を確認します。 必要な画像は対応表へ追加するだけにします。
ImageManager
Idとパスの対応表
ImageTable
ImageManager
起動時に読み込み
LoadGraph
Game
Idと表示Rectを渡す
ImageManager
ImageManager
終了時に解放
DeleteGraph
1 / 4画像の識別と対応表を読むゲーム内の画像IDと外部ファイルのパスが対応表で結び付いていることを理解する2 / 4画像ハンドルの所有と解放を確認する画像ハンドルの寿命を
ImageManagerへ集約し、解放漏れと二重解放を防ぐ3 / 4表示矩形へ画像を描く画像の素材寸法とゲーム上の表示・命中範囲を分けたまま画像を差し替える4 / 4画像管理を動作確認する画像の読み込み、描画、差し替え、解放の責任を確認し、音声管理へつなげる今回実装する範囲
| 区分 | 内容 |
|---|---|
| 読み直す処理 | ImageManagerのID、対応表、読み込み、描画、解放 |
| 追加・確認する処理 | 画像IDとパスの追加、画像差し替え、読み込み失敗の確認 |
| 維持する処理 | 各Entityの表示矩形、命中矩形、Managerの所有関係 |
今回の完成例
まず自分の確認結果を記録してから、第09回の配布プロジェクトを完成例として比較します。
| 確認するファイル | 確認する内容 |
|---|---|
ImageManager.h | 画像ID、ハンドル配列、所有とコピー禁止 |
ImageManager.cpp | 対応表の走査、読み込み失敗、描画、解放 |
GameTuning.h | 表示矩形と命中矩形を分けた調整値 |