Bahan Kesan Asas

Laman dikemaskini :
Tarikh penciptaan halaman :

Ringkasan

Memanipulasi parameter yang berkaitan dengan bahagian bahan BasicEffect untuk melihat bagaimana model kelihatan.

Persekitaran operasi

Prasyarat

Versi XNA yang disokong
  • 4.0
Platform yang Disokong
  • Windows (XP SP2 atau lebih baru, Lihat, 7)
  • Xbox 360
  • Windows Phone 7
Windows Diperlukan versi Vertex Shader 2.0
Windows Diperlukan Versi Pixel Shader 2.0

Persekitaran operasi

Platform
  • Windows 7
  • Xbox 360
  • Windows Phone 7

Cara bekerja dengan sampel

Papan kekunci kerjaXbox 360 controllermouse touch
Pilih parameter yang anda mahu ubah ↑、↓ Batang kiri ↑, ↓ Butang Kiri -
Mengubah parameter ←、→ Batang kiri ←, → ←→ Seret -

Bahan

Apa itu BasicEffect?

Di XNA, jika anda ingin memaparkan poligon 3D, anda perlu menulis program shader untuk menariknya dan memutuskan cara menariknya. Untuk melakukan ini, buat fail kesan yang berasingan, tulis program, baca sebagai kelas kesan (Kesan), dan laksanakan program shader.

Walau bagaimanapun, terdapat banyak kes di mana anda tidak memerlukan kesan lukisan khas, dan walaupun dalam kes sedemikian, Kesan diperlukan, jadi sangat rumit untuk mengganggu pelaksanaan program shader.

Oleh itu, parameter asas seperti bahan dan lampu disediakan sebagai sifat terlebih dahulu supaya kesan dapat dikendalikan dengan mudah "BasicEffect". Ia sangat mudah kerana anda tidak perlu membuat fail kesan, anda boleh mengendalikannya dengan hanya membuat contoh kelas.

Walaupun anda memuatkan data Model daripada kandungan, BasicEffect disetkan secara lalai, jadi anda tidak perlu mencipta contoh.

Bahan

Bahan terutamanya merujuk kepada ciri-ciri bahan bahan, dan digunakan untuk menentukan warna, tahap pantulan, dan kekuatan bahan tersebut. Oleh kerana ia telah menjadi mungkin untuk menyatakannya secara bebas dalam program shader, definisi bahan boleh mempunyai makna kasar tanpa diperbaiki, tetapi BasicEffect mempunyai parameter berikut:

Alpha Kelegapan. Nilai 1.0 menunjukkan kelegapan, dan nilai 0.0 mewakili ketelusan yang lengkap.
DiffuseColor Warna bahan objek yang akan dipaparkan. Mewakili warna dalam RGB. Teduhan bahan dicerminkan bergantung kepada keadaan cahaya.
EmissiveColor Warna objek yang dipancarkan untuk dipaparkan. Mewakili warna dalam RGB. Oleh kerana ia adalah warna yang memancarkan cahayanya sendiri, warna ditambah tanpa dipengaruhi oleh cahaya.
SpecularColor Warna pantulan objek yang akan dipaparkan. Mewakili warna dalam RGB. Bergantung pada arah dan sudut pandangan cahaya, bahan akan kelihatan dapat dilihat.
Kuasa SpecularPower Keamatan pantulan objek yang akan dipaparkan. Semakin tinggi nilai, semakin kecil kawasan itu mencerminkan.

Imej perubahan bahan

Imej di bawah menunjukkan nilai bahan yang berbeza.

Keadaan awal

Ini adalah keadaan sebaik sahaja memuatkan data model sampel.

初期状態

Alpha 1
Meresap (Merah) 0.8
Meresap (Hijau) 0.8
Meresap (Biru) 0
Emissive (Merah) 0
Emissive (Hijau) 0
Emissive (Biru) 0
Specular (Merah) 0
Specular (Hijau) 0
Specular (Biru) 0
Kuasa SpecularPower 5

Perubahan kelegapan (Alpha)

Ini adalah apabila anda menukar kelegapan. Warna biru latar belakang kelihatan samar-samar.

不透明度(Alpha)変更

Alpha 0.31
Meresap (Merah) 0.8
Meresap (Hijau) 0.8
Meresap (Biru) 0
Emissive (Merah) 0
Emissive (Hijau) 0
Emissive (Biru) 0
Specular (Merah) 0
Specular (Hijau) 0
Specular (Biru) 0
Kuasa SpecularPower 5

Pengubahsuaian yang meresap

Warna bahan diubah untuk menjadikannya kebiruan.

Diffuse 変更

Alpha 1
Meresap (Merah) 0.05
Meresap (Hijau) 0.71
Meresap (Biru) 1
Emissive (Merah) 0
Emissive (Hijau) 0
Emissive (Biru) 0
Specular (Merah) 0
Specular (Hijau) 0
Specular (Biru) 0
Kuasa SpecularPower 5

Pengubahsuaian Emisif

Unsur-unsur merah dan biru Emissive dimaksimumkan. Terlepas dari keadaan cahaya, sekurang-kurangnya keadaan ungu dikekalkan.

Emissive 変更

Alpha 1
Meresap (Merah) 0.8
Meresap (Hijau) 0.8
Meresap (Biru) 0
Emissive (Merah) 1
Emissive (Hijau) 0
Emissive (Biru) 1
Specular (Merah) 0
Specular (Hijau) 0
Specular (Biru) 0
Kuasa SpecularPower 5

Perubahan Spekular

Dengan menetapkan Specular, bahan akan kelihatan mencerminkan.

Specular 変更

Alpha 1
Meresap (Merah) 0.8
Meresap (Hijau) 0.8
Meresap (Biru) 0
Emissive (Merah) 0
Emissive (Hijau) 0
Emissive (Biru) 0
Specular (Merah) 1
Specular (Hijau) 1
Specular (Biru) 1
Kuasa SpecularPower 5

Pengubahsuaian SpecularPower

Mengubah SpecularPower mengubah julat permukaan reflektif.

SpecularPower 変更

Alpha 1
Meresap (Merah) 0.8
Meresap (Hijau) 0.8
Meresap (Biru) 0
Emissive (Merah) 0
Emissive (Hijau) 0
Emissive (Biru) 0
Specular (Merah) 1
Specular (Hijau) 1
Specular (Biru) 1
Kuasa SpecularPower 20

Bidang

Medan ini mempunyai maklumat material untuk disetkan kepada BasicEffect. Di samping itu, ia mempunyai parameter untuk memilih menu, tetapi kerana ia hanya parameter untuk operasi, saya akan meninggalkan butirannya.

/// <summary>
/// 不透明度
/// </summary>
private float alpha = 1.0f;

/// <summary>
/// ディフーズ
/// </summary>
private Vector3 diffuse = Vector3.One;

/// <summary>
/// エミッシブ
/// </summary>
private Vector3 emissive = Vector3.Zero;

/// <summary>
/// スペキュラー
/// </summary>
private Vector3 specular = Vector3.Zero;

/// <summary>
/// スペキュラーの強さ
/// </summary>
private float specularPower = 5.0f;

Mendapatkan semula bahan model

Nilai bahan yang ditetapkan dalam model sebagai nilai awal diambil. Dalam sampel ini, kod ditulis dengan andaian bahawa terdapat hanya satu kesan yang ditetapkan dalam model.

// ライトとビュー、プロジェクションはあらかじめ設定しておく
foreach (ModelMesh mesh in this.model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        // デフォルトのライト適用
        effect.EnableDefaultLighting();

        // ビューマトリックスをあらかじめ設定 ((0, 0, 6) から原点を見る)
        effect.View = Matrix.CreateLookAt(
            new Vector3(0.0f, 0.0f, 6.0f),
            Vector3.Zero,
            Vector3.Up
        );

        // プロジェクションマトリックスをあらかじめ設定
        effect.Projection = Matrix.CreatePerspectiveFieldOfView(
            MathHelper.ToRadians(45.0f),
            (float)this.GraphicsDevice.Viewport.Width /
                (float)this.GraphicsDevice.Viewport.Height,
            1.0f,
            100.0f
        );

        // モデルのマテリアルを取得 //

        // アルファ
        this.alpha = effect.Alpha;

        // ディフーズ
        this.diffuse = effect.DiffuseColor;

        // エミッシブ
        this.emissive = effect.EmissiveColor;

        // スペキュラー
        this.specular = effect.SpecularColor;

        // スペキュラーの強さ
        this.specularPower = effect.SpecularPower;
    }
}

Menyediakan bahan

Sampel mengesetkan nilai kepada BasicEffect Model. Untuk "DiffuseColor", "EmissiveColor", dan "SpecularColor", ditetapkan dalam Vektor3, bukan dalam struktur Warna. Tentukan unsur merah untuk X, hijau untuk Y dan biru untuk Z dengan nilai 0.0 ~ 1.0.

// マテリアルを設定
foreach (ModelMesh mesh in this.model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        // 不透明度
        effect.Alpha = this.alpha;

        // ディフーズ
        effect.DiffuseColor = this.diffuse;

        // エミッシブ
        effect.EmissiveColor = this.emissive;

        // スペキュラー
        effect.SpecularColor = this.specular;

        // スペキュラーの強さ
        effect.SpecularPower = this.specularPower;
    }
}

Dalam sampel, terdapat kod seperti kod operasi bahan dan paparan rentetan nilai, tetapi terdapat bahagian yang tidak berkaitan secara langsung dengan BasicMaterial, jadi saya akan meninggalkan penjelasannya. Anda boleh memuat turun sampel atau menyemak kod penuh.

BasicEffect.Alpha Hartanah

Mendapat dan menetapkan kelegapan. Tentukan nilai dalam julat 0.0~1.0. terapung Dapatkan, tetapkan

BasicEffect.DiffuseColor Hartanah

Mendapat dan menetapkan warna yang meresap. X berwarna merah, Y berwarna hijau, Z berwarna biru dan setiap nilai berada dalam julat 0.0~1.0. Vektor3 Dapatkan, tetapkan

BasicEffect.EmissiveColor Hartanah

Mendapat dan menetapkan warna yang dipancarkan. X berwarna merah, Y berwarna hijau, Z berwarna biru dan setiap nilai berada dalam julat 0.0~1.0. Vektor3 Dapatkan, tetapkan

BasicEffect.SpecularColor Hartanah

Mendapat dan menetapkan warna yang dicerminkan. X berwarna merah, Y berwarna hijau, Z berwarna biru dan setiap nilai berada dalam julat 0.0~1.0. Vektor3 Dapatkan, tetapkan

BasicEffect.SpecularPower Hartanah

Mendapat dan menetapkan keamatan pantulan. Nilai ditentukan sebagai 0.0~. terapung Dapatkan, tetapkan

Semua Kod

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif

namespace BasicEffectMaterial
{
    /// <summary>
    /// ゲームメインクラス
    /// </summary>
    public class GameMain : Microsoft.Xna.Framework.Game
    {
        /// <summary>
        /// グラフィックデバイス管理クラス
        /// </summary>
        private GraphicsDeviceManager graphics = null;

        /// <summary>
        /// スプライトのバッチ化クラス
        /// </summary>
        private SpriteBatch spriteBatch = null;

        /// <summary>
        /// スプライトでテキストを描画するためのフォント
        /// </summary>
        private SpriteFont font = null;

        /// <summary>
        /// 直前のキーボード入力の状態
        /// </summary>
        private KeyboardState oldKeyboardState = new KeyboardState();

        /// <summary>
        /// 直前のマウスの状態
        /// </summary>
        private MouseState oldMouseState = new MouseState();

        /// <summary>
        /// 直前のゲームパッド入力の状態
        /// </summary>
        private GamePadState oldGamePadState = new GamePadState();

        /// <summary>
        /// モデル
        /// </summary>
        private Model model = null;

        /// <summary>
        /// 不透明度
        /// </summary>
        private float alpha = 1.0f;

        /// <summary>
        /// ディフーズ
        /// </summary>
        private Vector3 diffuse = Vector3.One;

        /// <summary>
        /// エミッシブ
        /// </summary>
        private Vector3 emissive = Vector3.Zero;

        /// <summary>
        /// スペキュラー
        /// </summary>
        private Vector3 specular = Vector3.Zero;

        /// <summary>
        /// スペキュラーの強さ
        /// </summary>
        private float specularPower = 5.0f;

        /// <summary>
        /// 選択しているメニューのインデックス
        /// </summary>
        private int selectedMenuIndex = 0;

        /// <summary>
        /// パラメータの最大数
        /// </summary>
        private static int MaxParameterCount = 11;

        /// <summary>
        /// メニューリスト
        /// </summary>
        private static string[] MenuNameList = new string[]
            {
                "Alpha",
                "Diffuse (Red)",
                "Diffuse (Green)",
                "Diffuse (Blue)",
                "Emissive (Red)",
                "Emissive (Green)",
                "Emissive (Blue)",
                "Specular (Red)",
                "Specular (Green)",
                "Specular (Blue)",
                "SpecularPower"
            };

        /// <summary>
        /// パラメータテキストリスト
        /// </summary>
        private string[] parameters = new string[MaxParameterCount];


        /// <summary>
        /// GameMain コンストラクタ
        /// </summary>
        public GameMain()
        {
            // グラフィックデバイス管理クラスの作成
            this.graphics = new GraphicsDeviceManager(this);

            // ゲームコンテンツのルートディレクトリを設定
            this.Content.RootDirectory = "Content";

#if WINDOWS_PHONE
            // Windows Phone のデフォルトのフレームレートは 30 FPS
            this.TargetElapsedTime = TimeSpan.FromTicks(333333);

            // バックバッファサイズの設定
            this.graphics.PreferredBackBufferWidth = 480;
            this.graphics.PreferredBackBufferHeight = 800;

            // フルスクリーン表示
            this.graphics.IsFullScreen = true;
#endif

            // ウインドウ上でマウスのポインタを表示するようにする
            this.IsMouseVisible = true;
        }

        /// <summary>
        /// ゲームが始まる前の初期化処理を行うメソッド
        /// グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
        /// </summary>
        protected override void Initialize()
        {
            // コンポーネントの初期化などを行います
            base.Initialize();
        }

        /// <summary>
        /// ゲームが始まるときに一回だけ呼ばれ
        /// すべてのゲームコンテンツを読み込みます
        /// </summary>
        protected override void LoadContent()
        {
            // テクスチャーを描画するためのスプライトバッチクラスを作成します
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

            // フォントをコンテンツパイプラインから読み込む
            this.font = this.Content.Load<SpriteFont>("Font");

            // モデルを作成
            this.model = this.Content.Load<Model>("Model");

            // ライトとビュー、プロジェクションはあらかじめ設定しておく
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    // デフォルトのライト適用
                    effect.EnableDefaultLighting();

                    // ビューマトリックスをあらかじめ設定 ((0, 0, 6) から原点を見る)
                    effect.View = Matrix.CreateLookAt(
                        new Vector3(0.0f, 0.0f, 6.0f),
                        Vector3.Zero,
                        Vector3.Up
                    );

                    // プロジェクションマトリックスをあらかじめ設定
                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(
                        MathHelper.ToRadians(45.0f),
                        (float)this.GraphicsDevice.Viewport.Width /
                            (float)this.GraphicsDevice.Viewport.Height,
                        1.0f,
                        100.0f
                    );

                    // モデルのマテリアルを取得 //

                    // アルファ
                    this.alpha = effect.Alpha;

                    // ディフーズ
                    this.diffuse = effect.DiffuseColor;

                    // エミッシブ
                    this.emissive = effect.EmissiveColor;

                    // スペキュラー
                    this.specular = effect.SpecularColor;

                    // スペキュラーの強さ
                    this.specularPower = effect.SpecularPower;
                }
            }
        }

        /// <summary>
        /// ゲームが終了するときに一回だけ呼ばれ
        /// すべてのゲームコンテンツをアンロードします
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: ContentManager で管理されていないコンテンツを
            //       ここでアンロードしてください
        }

        /// <summary>
        /// 描画以外のデータ更新等の処理を行うメソッド
        /// 主に入力処理、衝突判定などの物理計算、オーディオの再生など
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Update(GameTime gameTime)
        {
            // 入力デバイスの状態取得
            KeyboardState keyboardState = Keyboard.GetState();
            MouseState mouseState = Mouse.GetState();
            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);

            // Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
            // ゲームを終了させます
            if (gamePadState.Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            
            // メニューの選択
            if ((keyboardState.IsKeyDown(Keys.Up) && this.oldKeyboardState.IsKeyUp(Keys.Up)) ||
                (gamePadState.ThumbSticks.Left.Y >= 0.5f &&
                    this.oldGamePadState.ThumbSticks.Left.Y < 0.5f))
            {
                // 選択メニューをひとつ上に移動
                this.selectedMenuIndex =
                    (this.selectedMenuIndex + this.parameters.Length - 1) % this.parameters.Length;
            }
            if ((keyboardState.IsKeyDown(Keys.Down) && this.oldKeyboardState.IsKeyUp(Keys.Down)) ||
                (gamePadState.ThumbSticks.Left.Y <= -0.5f &&
                    this.oldGamePadState.ThumbSticks.Left.Y > -0.5f) ||
                (this.oldMouseState.LeftButton == ButtonState.Pressed &&
                 mouseState.LeftButton == ButtonState.Released))
            {
                // 選択メニューをひとつ下に移動
                this.selectedMenuIndex =
                    (this.selectedMenuIndex + this.parameters.Length + 1) % this.parameters.Length;
            }

            // 各マテリアルの値を操作
            float moveValue = 0.0f;
            if (keyboardState.IsKeyDown(Keys.Left))
            {
                moveValue -= (float)gameTime.ElapsedGameTime.TotalSeconds;
            }
            if (keyboardState.IsKeyDown(Keys.Right))
            {
                moveValue += (float)gameTime.ElapsedGameTime.TotalSeconds;
            }
            if (mouseState.LeftButton == ButtonState.Pressed)
            {
                moveValue += (mouseState.X - this.oldMouseState.X) * 0.005f;
            }
            if (gamePadState.IsConnected)
            {
                moveValue += gamePadState.ThumbSticks.Left.X *
                             (float)gameTime.ElapsedGameTime.TotalSeconds;
            }

            switch (this.selectedMenuIndex)
            {
                case 0: // 不透明度
                    this.alpha = MathHelper.Clamp(this.alpha + moveValue,
                                                  0.0f,
                                                  1.0f);
                    break;
                case 1: // ディフューズ (赤)
                    this.diffuse.X = MathHelper.Clamp(this.diffuse.X + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 2: // ディフューズ (緑)
                    this.diffuse.Y = MathHelper.Clamp(this.diffuse.Y + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 3: // ディフューズ (青)
                    this.diffuse.Z = MathHelper.Clamp(this.diffuse.Z + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 4: // エミッシブ (赤)
                    this.emissive.X = MathHelper.Clamp(this.emissive.X + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 5: // エミッシブ (緑)
                    this.emissive.Y = MathHelper.Clamp(this.emissive.Y + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 6: // エミッシブ (青)
                    this.emissive.Z = MathHelper.Clamp(this.emissive.Z + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 7: // スペキュラー (赤)
                    this.specular.X = MathHelper.Clamp(this.specular.X + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 8: // スペキュラー (緑)
                    this.specular.Y = MathHelper.Clamp(this.specular.Y + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 9: // スペキュラー (青)
                    this.specular.Z = MathHelper.Clamp(this.specular.Z + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 10: // スペキュラーの強さ
                    moveValue *= 5.0f;
                    this.specularPower = MathHelper.Clamp(this.specularPower + moveValue,
                                                          0.0f,
                                                          100.0f);
                    break;
            }

            // マテリアルを設定
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    // 不透明度
                    effect.Alpha = this.alpha;

                    // ディフーズ
                    effect.DiffuseColor = this.diffuse;

                    // エミッシブ
                    effect.EmissiveColor = this.emissive;

                    // スペキュラー
                    effect.SpecularColor = this.specular;

                    // スペキュラーの強さ
                    effect.SpecularPower = this.specularPower;
                }
            }

            // 入力情報を記憶
            this.oldKeyboardState = keyboardState;
            this.oldMouseState = mouseState;
            this.oldGamePadState = gamePadState;

            // 登録された GameComponent を更新する
            base.Update(gameTime);
        }

        /// <summary>
        /// 描画処理を行うメソッド
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Draw(GameTime gameTime)
        {
            // 画面を指定した色でクリアします
            this.GraphicsDevice.Clear(Color.CornflowerBlue);

            // 深度バッファを有効にする
            this.GraphicsDevice.DepthStencilState = DepthStencilState.Default;

            // モデルを描画
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                mesh.Draw();
            }

            // スプライトの描画準備
            this.spriteBatch.Begin();

            // 操作
            this.spriteBatch.DrawString(this.font,
                "Up, Down : Select Menu",
                new Vector2(20.0f, 20.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "Left, right : Change Value",
                new Vector2(20.0f, 45.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "MouseClick & Drag :",
                new Vector2(20.0f, 70.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "    Select Menu & Change Value",
                new Vector2(20.0f, 95.0f), Color.White);

            // 各メニュー //
            for (int i = 0; i < MenuNameList.Length; i++)
            {
                this.spriteBatch.DrawString(this.font,
                    MenuNameList[i],
                    new Vector2(40.0f, 120.0f + i * 24.0f), Color.White);
            }

            // 各パラメータ //

            // 不透明度
            this.parameters[0] = this.alpha.ToString();

            // ディフューズ (赤)
            this.parameters[1] = this.diffuse.X.ToString();

            // ディフューズ (緑)
            this.parameters[2] = this.diffuse.Y.ToString();

            // ディフューズ (青)
            this.parameters[3] = this.diffuse.Z.ToString();

            // エミッシブ (赤)
            this.parameters[4] = this.emissive.X.ToString();

            // エミッシブ (緑)
            this.parameters[5] = this.emissive.Y.ToString();

            // エミッシブ (青)
            this.parameters[6] = this.emissive.Z.ToString();

            // スペキュラー (赤)
            this.parameters[7] = this.specular.X.ToString();

            // スペキュラー (緑)
            this.parameters[8] = this.specular.Y.ToString();

            // スペキュラー (青)
            this.parameters[9] = this.specular.Z.ToString();

            // スペキュラーの強さ
            this.parameters[10] = this.specularPower.ToString();

            for (int i = 0; i < this.parameters.Length; i++)
            {
                this.spriteBatch.DrawString(this.font,
                    this.parameters[i],
                    new Vector2(250.0f, 120.0f + i * 24.0f), Color.White);
            }

            // 選択インデックス
            this.spriteBatch.DrawString(this.font, "*",
                new Vector2(20.0f, 124.0f + this.selectedMenuIndex * 24.0f), Color.White);

            // スプライトの一括描画
            this.spriteBatch.End();

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}