Skip to content
第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内部の固定配列で所有している
  • 中心座標と経過時間を開始時に初期化している
  • 空きがない場合もゲーム全体を停止させない