Skip to content

第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)と、今回実装する視覚エフェクトを、同じ「イベント成立の瞬間」に発生させます。
音とエフェクトを同時に出し、操作や衝突の結果をプレイヤーに分かりやすく伝えます。

イベント成立と演出の連携
Game::ResolveCollisions()
命中SE
SoundManager
Game::ResolveCollisions()
命中エフェクト
EffectManager
Game::ResolveCollisions()
撃破時に加算
スコア

作業の準備 ​

開始用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には今回必要な定数を追記し、自身で調整した既存の値を維持します。

第10回の目次 ​