忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

かんたんXNA4.0 その3 2D画像の表示

前回はウィンドウの背景を塗りつぶしました。
しかしこれだけでは華がありません。
もう少しましにしましょう。

今回は1×1の画像(Texture2D)を作り、それを表示することにします。
黒い四角を表示するのです。

まず、2Dの描画を行うには、2D描画を全てカプセル化しているSpriteBatchクラスを使います。
このクラスはTexture2Dを表示するSpriteBatch.Drawメソッドや、ここでは扱いませんが、文字列を表示するDrawStringメソッドを持っています。

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

class MyGame : Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Texture2D texture;

    public MyGame()
    {
        graphics = new GraphicsDeviceManager(this);
    }

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        texture = new Texture2D(GraphicsDevice, 1, 1);
        texture.SetData<Color>(new Color[] { Color.Black });
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        spriteBatch.Draw(texture, new Rectangle(0, 0, 100, 100), Color.White);
        spriteBatch.End();
    }

    static void Main()
    {
        using (MyGame game = new MyGame())
        {
            game.Run();
        }
    }
}

xna4.0SimplestTexture.jpg 
※左上に、黒い1x1のTexture2Dを、 100x100に拡大して描画しています。

前回と比べて新しく出てきたのが、LoadContentメソッドです。
これは、グラフィックスを表すデータ(例えば今回のようにTexture2Dだったり、あるいは3Dのモデルだったりです)をロードすべきときに自動的に呼ばれます。
このメソッドの中で、SpriteBatchのコンストラクタを呼んでいます。
引数にGraphicsDeviceがあるのは、SpriteBatchがGraphicsDeviceを カプセル化しているからでしょう。(多分)

その後Texture2Dの1×1インスタンスをを作成しています。
その後、その1×1のマスを黒で埋めています。
1×1の黒いTexture2Dができあがったというわけです。
もちろん、サイズを変えてもうちょっとカラフルにすることもできます。

        texture = new Texture2D(GraphicsDevice, 3, 1);
        texture.SetData<Color>(new Color[] { Color.Navy, Color.White, Color.Red });

xna4.0SimplestTextureTriColor.jpg

MyGame.Drawメソッドに目を転じましょう。
背景をCornflowerBlueで塗りつぶした後、 左上に100×100に拡大したTexture2Dを描画しています。
そのとき、頭と後ろにSpriteBatch.Beginメソッドと SpriteBatch.Endメソッドを呼んでやる必要があります。
呼ばなければ例外が発生し強制終了です。
これは、2D画像を表示するときだけではなくて、文字を表示するときも同じです。
ちなみに、もちろん、BeginとEndの間にDrawメソッドは何回呼んでもかまいません。


        spriteBatch.Begin();
        spriteBatch.Draw(texture, new Rectangle(0, 0, 100, 100), Color.White);
        spriteBatch.Draw(texture, new Rectangle(200, 200, 80, 80), Color.White);
        spriteBatch.End();

xna4.0SimplestTextureTwoRectangle.jpg
(※2回呼べばとうぜん2つの四角が表示されます)

ちなみにこのColor.Whiteというのは描かれるテクスチャに色付けされる色のことです。
ここに指定する色が青ならばテクスチャは青みがかって描かれます。

さて、今回のこの方法はあまりスマートではありません。
画像はなるべく外部のファイルにしておきたいものです。
次回はその方法について扱います。

 

拍手[2回]

PR