フォントを設定して Score を表示

新しい項目を追加

XNA でフォントを設定してゲームのスコアを表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. メニューから [ファイル][新規作成][プロジェクト] で新しいプロジェクトを作成して下さい。
    XNA でフォントを設定してゲームのスコアを表示します。
    英字の表示は簡単なのですが、日本語の表示はちょっと手間がかかります。
    ここでは英字や数字に限定して TEXT 文字列を描画する方法を説明します。 (^_^;)
  2. XNA アプリケーションで文字列の表示を行うには、XNAアプリケーションに利用するフォントを追加しなければなりません。
    ソリューションエクスプローラで Content を右クリックして、ポップアップの「追加⇒新しい項目」で「Sprite Font」を選択して下さい。

  3. 追加した「SpriteFont1.spritefont」を開き、ソースコードを編集します。
    項目 説明
    FontName TrueTypeフォントの名前を指定
    Size フォントサイズをポイント単位で指定
    Spacing 文字間のピクセル数を指定
    Style フォントスタイル(Regular、Bold、Italic)を指定
    CharacterRegions 利用する文字範囲を指定( 〜~ は、全ASCIIコードに設定)
    アルファベットの描画には、FontName に「MS UI Gothic」など、自分の PC に存在するフォント名を指定します。
    自分の PC で使用できるフォント名は、コントロールパネルのフォントから確認することが出来ます。
    ややこしい説明は抜きにしてとりあえず フォント名に「MS UI Gothic」 を設定して下さい。 ヽ(^^ )
    SpriteFont1.spritefont
    <?xml version="1.0" encoding="utf-8"?>
    <XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
      <Asset Type="Graphics:FontDescription">
    
        <!--フォント名-->
        <FontName>MS UI Gothic</FontName>
    
        <!--フォントサイズ-->
        <Size>14</Size>
    
        <!--文字間隔-->
        <Spacing>2</Spacing>
    
        <!--フォントスタイル-->
        <Style>Regular</Style>
    
        <!--文字領域-->
        <CharacterRegions>
          <CharacterRegion>
            <Start> </Start>
            <End>~</End>
          </CharacterRegion>
        </CharacterRegions>
      </Asset>
    </XnaContent>
    
  4. Game1.cs を編集して Score を表示するプログラムを作成します。
    class Game1 の最初の方で、次の領域を宣言して下さい。
    SpriteFont font はフォントを設定する領域です。
    Score はゲームのスコアを格納する領域です。
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
            public SpriteFont font;        //フォント
            public int Score;              //スコア
        
  5. Initialize() でスコアの初期値を設定します。
    Score には、初期値として 1234 を格納しています。
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
                base.Window.Title = "XNA Game Studio";
                Score = 1234;
    
                base.Initialize();
            }
        
  6. LoadContent() メソッドにフォントを生成するコードを追加します。
    "SpriteFont1" は Asset Name に表示されていた ID です。
            protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                // TODO: use this.Content to load your game content here
                font = Content.Load<SpriteFont>("SpriteFont1");
            }
        
  7. Update() メソッドでキーの状態を調べて Score を「アップ/ダウン」します。
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                KeyboardState  keyState = Keyboard.GetState();
                if (keyState.IsKeyDown(Keys.NumPad9)) Score++;
                if (keyState.IsKeyDown(Keys.NumPad8)) Score += 10;
                if (keyState.IsKeyDown(Keys.NumPad7)) Score += 100;
                if (keyState.IsKeyDown(Keys.NumPad3)) Score--;
                if (keyState.IsKeyDown(Keys.NumPad2)) Score -= 10;
                if (keyState.IsKeyDown(Keys.NumPad1)) Score -= 100;
    
                base.Update(gameTime);
            }
        
  8. Draw() メソッドにスコアを描画するコードを追加します。
    Score_write() は Score の値を TEXT(数字)で描画するメソッドです。
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin();        //描画開始
                spriteBatch.DrawString(font, "SCORE:", new Vector2(0, 100), Color.Black);
                //spriteBatch.DrawString(font, "漢字は駄目:", new Vector2(0, 100), Color.Black);
                Score_write();
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        
  9. Score の値を TEXT(数字)で描画する Score_write() メソッドです。
    Score.ToString("d8") で Score の値を TEXT(数字)に変換します。
    d8 は変換する桁数です。d6 に変更して試して見て下さい。
    Color.Black は描画する色です。Color.Red に変更して試して見て下さい。
            public void Score_write()
            {
                spriteBatch.DrawString(font, Score.ToString("d8"), new Vector2(70, 100), Color.Black);
                //spriteBatch.DrawString(font, Score.ToString("d6"), new Vector2(70, 100), Color.Red);
            }
        
  10. メニューからコンパイルして実行して下さい。
    数字キーの「7,8,9」と「1,2,3」でスコアーを操作してみて下さい。

前田稔(Maeda Minoru)の超初心者のプログラム入門

超初心者のプログラム入門(XNA(C#) game program)