前回に引き続き、iTween使えよ!って内容です。
今回は前回製作したTweenControlを拡張して処理が終わったら何かを行う方法を紹介します。
まずは、処理後に呼ぶメソッドを保存する為の変数を容易します。
public delegate void TweenEndFunc(); TweenEndFunc m_tweenEndFunction;
次に開始時の処理に終了時のメソッドを渡せるようにします。
public void Start(T start, T end, float duration, TweenEndFunc onTweenEndFunc = null) { m_start = start; m_target = end; m_duration = duration; m_timer = 0.0f; CurrentValue = m_start; m_tweenEndFunction = onTweenEndFunc; if (duration == 0.0f) { IsActive = false; } else { IsActive = true; } }
用意が出来ましたので、更新処理の中に処理が終わった時(IsActiveがfalseになる時)にメソッドを呼ぶようにします。
public void Update(float delta) { if (!IsActive) { return; } m_timer += delta; if (m_timer >= m_duration) { m_timer = m_duration; IsActive = false; // 処理が終わった時のメソッドが登録されていれば、呼ぶ if (m_tweenEndFunction != null) { m_tweenEndFunction(); } } float percentage = Math.Min(m_timer / m_duration, 1.0f); CurrentValue = m_lerpFunction(m_start, m_target, percentage); }
後は開始処理を呼ぶ時に実際にメソッドを渡す様にするだけです。
public void StopBgm() { m_volumeTweener.Start(MediaPlayer.Volume, 0.0f, m_fadeDuration, _StopBgm); } protected void _StopBgm() { MediaPlayer.Stop(); }
上記の例ではBgmのフェードが終わったら再生を止めています。
これを使えばフェードイン、アウトを繰り返して行う事も出来ます。
以上です。今回はソースコードへのリンクを置いておきます。