DrawFonts Class で英数字を表示

英数字を表示する DrawFonts Class を作成します。

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

DrawFonts Class の説明

  1. 英数字を表示する DrawFonts Class を作成します。
    英数字の表示は spriteBatch で画像を切り出す の延長です。
  2. DrawFonts Class の領域の定義。
                SpriteBatch spBatch;
                Texture2D   img;       //画像の指定
                int         num;
                string      Buffer;
                int         xpos;
                int         ypos;
        
  3. コンストラクタでは、領域の初期設定を行います。
                public DrawFonts(SpriteBatch spbatch, Texture2D pic )
                {
                    spBatch = spbatch;
                    img = pic;
                    xpos = 0;
                    ypos = 0;
                }
        
  4. Buffer に表示する文字列を格納するメソッドです。
    x, y は表示する座標です。
    StringBuilder を使うので、Game1.cs の最初の方で System.Text を追加して下さい。
    String をそのまま使うことも出来るのですが、StringBuilder を使うと処理が速くなります。
    using System.Text; //追加
                public void SetChar(int x, int y, string str,int val)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append(str);
                    sb.AppendFormat("{0:d4}", val);
                    Buffer = sb.ToString();
                    xpos = x;
                    ypos = y;
                }
        
  5. Buffer を描画するメソッドです。
    fonts.png の画像は一文字が「幅=19 ピクセル,高さ=33 ピクセル」です。
                public void draw()
                {
                    for (int i=0; i<Buffer.Length; i ++)
                    {   num = (int)Buffer[i] - ' ';
                        spBatch.Draw(img, new Rectangle(i*19+xpos, ypos, 19, 33),
                            new Rectangle(19*(num%16), 33*(num/16), 19, 33), Color.White);
                    }
                }
        

プログラムの説明

  1. 自機をキーで操作しながら、X座標を表示してみました。
    TexFont が DrawFonts Class で使用するページ先頭の画像です。
            Texture2D   ship;           //自機テクスチャ
            Texture2D   TexFont;        //英数字テクスチャ
            Vector2     pos;            //自機の座標
            DrawFonts   msg;            //文字描画クラス
        
  2. LoadContent() メソッドで画像をロードして DrawFonts Class を生成します。
            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
                ship = Content.Load<Texture2D>("ship");
                TexFont = Content.Load<Texture2D>("fonts");
                msg = new DrawFonts(spriteBatch, TexFont);
            }
        
  3. Update() メソッドです。
    矢印キーで自機を操作して、X座標を表示しています。
            protected override void Update(GameTime gameTime)
            {
                // ゲームを終了する
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed  ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                if (Keyboard.GetState().IsKeyDown(Keys.Left))  pos.X -= 2;
                if (Keyboard.GetState().IsKeyDown(Keys.Right)) pos.X += 2;
                if (Keyboard.GetState().IsKeyDown(Keys.Up))    pos.Y -= 2;
                if (Keyboard.GetState().IsKeyDown(Keys.Down))  pos.Y += 2;
                msg.SetChar(100, 100, "DEBUG MODE:", (int)pos.X);
    
                base.Update(gameTime);
            }
        
  4. Draw() メソッドで自機とメッセージを描画します。
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
                spriteBatch.Draw(ship, pos, Color.White);
                msg.draw();
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        

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

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