読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

MonoGameWindowsRuntimeゲームプログラミング入門vol6:文字列を描画する

C# MonoGame

SpriteFont

MonoGameで文字列を描画するときもwavサウンドを再生するときと同じようにxnb形式にコンパイルする必要があります。

XNAGameStudio4.0.4をまだインストールしていない人もしくはコンテンツビルド用プロジェクトを作成していない人は「サウンドを再生する」を参照して、インストールとコンテンツビルド用のプロジェクトを作成してください。

 

MonoGameにおいて文字を描画するためのフォントはSpriteFontと呼ばれ、xml形式で記述された文章にフォントの名前や特徴を記入し、xnbにコンパイルします。

80

 

 

SpriteFontを作成する

ではコンテンツビルド用プロジェクトに新しくSpriteFontを作成しましょう。

DummyProjectContentプロジェクトを右クリックして、追加→新しい項目を押します。

81

 

 

VisualC#からSpriteFontを選択し、SpriteFontの名前を入力し、OKを押します。

82

 

 

SpriteFontが作成できたことが確認できたら、一度DummyuProjectの方をビルドしましょう。

83

84

 

 

ではコンパイルできたxnbファイルを取得します。

DummyProjetを右クリック→「エクスプローラでフォルダーを開く」を押します。

85

 

DummyProject/Bin/X86/Debug/Contentディレクトリに入っているTestFont.xnbファイルをデスクトップにコピーしておきましょう。

86

 

 

ではMonoGameの方のProjectに戻り、Contentフォルダを右クリックして追加→既存の項目を押し、先ほどデスクトップにコピーしたSpriteFontのxnbファイルを追加しましょう。

87

 

 

コンパイル済みSpriteFontを追加することができました。

88

さらにTestFont.xnbのプロパティウインドウからビルドアクションを「コンテンツ」にしましょう。

f:id:garicchi:20140823052639p:plain

 

SpriteFontを描画する

では先ほどつくったSpriteFontを使って実際に文字列を描画します。

Game1.csのメンバにSpriteFontクラスを追加します。

SpriteFont font;

 

LoadContentメソッドでSpriteFontを読み込みます。

protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(GraphicsDevice);
    font = Content.Load<SpriteFont>("TestFont");

}

 

DrawメソッドではSpriteBatchのBeginとEndの間にDrawStringメソッドで第一引数にSpriteFont、第二引数に描画したい文字列(英字文字列)をいれます。

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    spriteBatch.Begin();

    spriteBatch.DrawString(font,"Test My Text",new Vector2(10,10),Color.White);

    spriteBatch.End();

    base.Draw(gameTime);
}

 

文字を描画することができました。

89

 

public class Game1 : Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    SpriteFont font;
    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }


    protected override void Initialize()
    {

        base.Initialize();
    }


    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        font = Content.Load<SpriteFont>("TestFont");
  
    }

    protected override void UnloadContent()
    {
        
        
    }


    protected override void Update(GameTime gameTime)
    {
        

        base.Update(gameTime);
    }


    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();

        spriteBatch.DrawString(font,"Test My Text",new Vector2(10,10),Color.White);

        spriteBatch.End();

        base.Draw(gameTime);
    }
}

 

 

日本語文字について

日本語文字列の描画については現時点では私が解決方法を見いだせなかったので対応できていません。

よって現時点では日本語を描画したい場合は一度画像にし、画像として描画するしか方法がありません。

ゲームにおいて日本語は定型文として画像として描画し、高速で普遍的なスコアなどはSPriteFontで描画するとよいと思います。

 

しかし、DxToolkitのサイトを見てみると日本語SpriteFontで描画している例があるのでなにか方法があるのかもしれません

DxToolkit - SpriteFont

 

文字を描画する | garicchi.com

目次