久々の、XNAメモです! …と言っても短いですが。
今回は、シンプルな画面のフェードアウト、フェードイン処理の実装方法をメモります。
今回の処理は、恐らく一番楽な単純に画面全体を徐々に暗くしていく処理を実装します。
実際に行う事は、画面全体にテクスチャアを描画し、描画時にSpriteBatch.Draw()メソッドに渡す色のアルファ値を、毎フレーム変更するだけです。
ではまず、必要な変数の宣言と初期化です。
Texture2D m_pixel; float m_alpha; float m_alphaIncAmount; bool m_isFadeOut; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; m_alpha = 0.0f; m_alphaIncAmount = 0.004f; m_isFadeOut = true; }
次は実際にフェードの処理を実装します。ここで描画で使用するアルファ値を変化します。
private void UpdateFade() { m_alpha += m_alphaIncAmount; if (m_alpha >= 1.0f) { m_alpha = 1.0f; m_isFadeOut = false; } }
後は描画するだけです。
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // 画面のサイズ Rectangle screenBound = new Rectangle(0, 0, 800, 600); // フェードの色 Color colour = new Color(0.0f, 0.0f, 0.0f, m_alpha); // 描画 spriteBatch.Begin(); spriteBatch.Draw(m_pixel, screenBound, colour); spriteBatch.End(); base.Draw(gameTime); }
結果は以下の用になります。
フェードインの処理は、アルファ値の上げる代わりに下げるだけで実装できます。UpdateFade()メソッド内の処理を以下の用に変更すると、フェードアウトと、フェードインが交互に行われます。
private void UpdateFade() { if (m_isFadeOut) { m_alpha += m_alphaIncAmount; if (m_alpha >= 1.0f) { m_alpha = 1.0f; m_isFadeOut = false; } } else { m_alpha -= m_alphaIncAmount; if (m_alpha <= 0.0f) { m_alpha = 0.0f; m_isFadeOut = true; } } }
結果、以下の用に変わります。
今回はココまでです。
何時も通りネタが無いので、XNAにしろUnityにしろ、何か取り上げて欲しい事がある方は、ご連絡かコメントください m_ _m
(だからと言ってリクエストに自分の技術が合うかはわかりませんが・・・)
今、卒業制作でXNA4.0を用いてゲームを作成しているのですが、タイトル画面からゲーム画面への状態遷移がよくわかりません。
よかったら紹介していただけませんか?
状態転移(ゲーム場面の切り替え)については、ゲームの状態変更の実装方法1~3で紹介したので、そちらを参考にしてみてください。 (プログラミングメモ ⇒ XNA メモ から見られます)