XNAメモ – フェードアウト・フェードインの作り方

Posted: 2012年8月11日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , , ,

久々の、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

(だからと言ってリクエストに自分の技術が合うかはわかりませんが・・・)

 

コメント
  1. 匿名 より:

    今、卒業制作でXNA4.0を用いてゲームを作成しているのですが、タイトル画面からゲーム画面への状態遷移がよくわかりません。
    よかったら紹介していただけませんか?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中