Appearance
第10回 エフェクトと演出
2 / 4 時間でエフェクトを更新する
このステップの目的
エフェクトの経過時間から大きさと透明度を計算し、表示時間を終えたら停止する
経過時間を進める
エフェクトもゲームの更新処理からdeltaTimeを受け取ります。 ageが設定したDuration以上になったら実行状態をfalseへ戻します。
EffectManager.cppcpp
effect.age += deltaTime;
if (effect.age >= tuning::effect::Duration)
{
effect.isActive = false;
continue;
}表示を計算する
経過時間を表示時間で割ると、開始から終了までの割合を求められます。 その割合から半径と透明度を計算し、中心位置へ円を描きます。
エフェクトの表示時間と大きさはGameTuning.hへ置き、コードを変更せず比較できるようにします。
表示時は、経過割合から円の半径と透明度を求めます。 progressは0から1の範囲なので、開始時は小さく濃く、終了時は大きく薄い円になります。
EffectManager.cppcpp
for (const Effect& effect : effects)
{
if (!effect.isActive)
continue;
const float progress = effect.age / tuning::effect::Duration;
const float radius = tuning::effect::StartRadius +
(tuning::effect::EndRadius - tuning::effect::StartRadius) * progress;
const int alpha = static_cast<int>(255.0f * (1.0f - progress));
SetDrawBlendMode(DX_BLENDMODE_ALPHA, alpha);
DrawCircle(
static_cast<int>(effect.center.x),
static_cast<int>(effect.center.y),
static_cast<int>(radius),
GetColor(255, 220, 80),
FALSE);
}
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);チェックリスト
-
ageをdeltaTimeで進めている - 表示時間を終えたエフェクトを停止している
- 経過割合から表示の大きさを変えている
- エフェクトの調整値をTuningへまとめている