XNA メモ – Tween(Lerp系)処理後に何かをする方法

Posted: 2015年5月13日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , ,

前回に引き続き、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のフェードが終わったら再生を止めています。

これを使えばフェードイン、アウトを繰り返して行う事も出来ます。

 

以上です。今回はソースコードへのリンクを置いておきます。

そーす

コメントを残す