Appearance
第10回 エフェクトと演出
1 / 4 エフェクトを固定数で管理する
このステップの目的
命中時に表示するエフェクトを、既存のManagerと同じ固定容量の考え方で管理する
エフェクトの状態
エフェクトは画像を持つEntityではなく、中心座標、経過時間、実行状態だけを持つ小さなデータです。 このデータはEffectManagerだけが扱うため、Manager内のprivate構造体として定義します。
EffectManager.hcpp
struct Effect
{
Vector2 center = {};
float age = 0.0f;
bool isActive = false;
};
static constexpr std::size_t Capacity = 32;
std::array<Effect, Capacity> effects = {};空き要素を開始する
Spawn()は停止中の要素へ中心座標を設定し、経過時間を0へ戻して表示を開始します。 空きがないときは何もせず、ゲームの進行を止めません。
第02回の弾のプールで学んだ考え方を、エフェクトへそのまま反復しています。
空き要素を見つけたら、その要素だけを初期化して開始します。 配列を増やすのではなく、停止中の要素を再利用する点が弾のプールと同じです。
EffectManager.cppcpp
void EffectManager::Spawn(const Vector2& center)
{
for (Effect& effect : effects)
{
if (effect.isActive)
continue;
effect.center = center;
effect.age = 0.0f;
effect.isActive = true;
return;
}
}チェックリスト
- エフェクトをManager内部の固定配列で所有している
- 中心座標と経過時間を開始時に初期化している
- 空きがない場合もゲーム全体を停止させない