第10回 エフェクトと演出
第09回では、射撃や命中、被弾などの出来事に応じて効果音を鳴らす仕組みを実装しました。
第10回では、状況を分かりやすくするヒットエフェクトと、ループするスクロール背景を実装します。
弾が当たった瞬間に円形のエフェクトを発生させるとともに、宇宙空間が奥へ流れる背景ループ処理を追加します。
始める前に
ゲームの更新・描画順序と、画像・音声の呼び出しを確認してください。確認したい場合は、画像リソースの管理/音声の管理と再生を参照してください。
前の回の受講や完成物は必須ではありません。下の開始用プロジェクトを使い、配布済みの処理と今回追加する処理を確認してから進めます。
配布プロジェクト
第10回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。
第09回で実装した音声管理(SoundManager)によるBGM・効果音再生が含まれたプロジェクトから開始します。
配布ファイル一覧
| ファイル | 役割 |
|---|---|
| Source/Shooting/SoundManager.cpp | 第09回で完成させた音声管理処理 |
| Source/Shooting/Game.cpp | エフェクトManagerの組み込みと背景描画 |
| Source/Shooting/Tuning/GameTuning.h | エフェクトの継続時間や背景のスクロール速度 |
| Assets/Images/Background.png | ループスクロール用の宇宙背景画像 |
この回のゴール
敵に弾が命中した瞬間や自機が被弾した瞬間に光の輪が広がり、宇宙背景が滑らかに下方へスクロールする状態を目指します。
- 寿命を持つエフェクトを
EffectManager内で固定数プール管理できる - 経過時間に応じてエフェクトの半径を拡大し、アルファ値(透明度)をフェードアウトさせて消去できる
- 命中・被弾の成立位置(中心座標)へエフェクトの発生を正しく接続できる
- 背景画像を2枚連続して並べて描画し、継ぎ目のないループスクロールを実現できる
今回のポイント
オブジェクトプールの反復適用と軽量な設計
エフェクトも、弾と同じように「短時間に多数発生し、一定時間が経過すると消滅する」オブジェクトです。
そのため、第02回で学んだ固定容量の配列と有効フラグを用いたプール管理をそのまま適用します。
専用画像を使わず、図形描画(DrawCircle)と半透明合成(DX_BLENDMODE_ALPHA)でエフェクトを作ります。画像を持たないため軽量で、中心座標と経過時間だけの単純なデータ構造で管理できます。
視覚と聴覚を連動させたフィードバック
第09回で接続した効果音(SE)と、今回実装する視覚エフェクトを、同じ「イベント成立の瞬間」に発生させます。
音とエフェクトを同時に出し、操作や衝突の結果をプレイヤーに分かりやすく伝えます。
作業の準備
開始用ZIPには前回までの到達状態が含まれています。今回の新規ファイルは、本文を進めながら追加します。ファイルの登録方法や変更の引き継ぎ手順は、配布ファイルの手順で確認できます。
| 作業 | 対象 |
|---|---|
| 新規作成 | Source/Shooting/EffectManager.cpp、Source/Shooting/EffectManager.h |
| 既存ファイルへ追記・編集 | Source/Shooting/Game.cpp、Source/Shooting/Game.h、Source/Shooting/Tuning/GameTuning.h |
| 重点的に実装・確認する処理 | EffectManager::Spawn、EffectManager::Update、Game::DrawBackground |
ヘッダーの宣言、#include、登録テーブル、エラー処理などは、最終ステップの参考実装を参照できます。重点関数は各ステップで処理の流れを確認しながら記述します。関数を変更する際は、宣言・定義・呼び出し元の整合性を保ちます。
GameTuning.hには今回必要な定数を追記し、自身で調整した既存の値を維持します。