[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>文字を表示する(Font)

文字を表示する(Font)

文字の表示はデバックや、メッセージ表示などに利用できます。

ソースコード

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Project2
{
    /// <summary>
    /// md3d2 の概要の説明です。
    /// </summary>
    public class md3d2:Form
    {

        public md3d2():base()
        {
            //最小サイズを設定
            this.MinimumSize=new Size(80,60);
            this.ClientSize = new Size(300,300);
            this.Text ="Direct3D-My";
        }

        private Device device_;
        private PresentParameters presentParam_;

        /// <summary>
        /// Direct3Dの初期化を行います。
        /// </summary>
        /// <returns>初期化が成功したかどうか</returns>
        public bool DXInitialize()
        {
            try
            {
                presentParam_ = new PresentParameters();

                presentParam_.Windowed =true;
                presentParam_.SwapEffect = SwapEffect.Discard;

                device_ = new Device(0,DeviceType.Hardware,this
                    ,CreateFlags.HardwareVertexProcessing,presentParam_);

                //フォントを作成
                createFont();

                return true;
            }
            catch
            {
                return false;
            }

        }

        /// <summary>
        /// フォント
        /// </summary>
        private Microsoft.DirectX.Direct3D.Font font_;


        /// <summary>
        /// フォントの作成
        /// </summary>
        private void createFont()
        {
            FontDescription fd =new FontDescription();

            fd.Height = 16;
            fd.FaceName = "MS ゴシック";

            font_ = new Microsoft.DirectX.Direct3D.Font(device_,fd);
        }


        public void Render()
        {
            if(device_==null)return;
            if(this.WindowState ==FormWindowState.Minimized)return;


            //クリア
            device_.Clear(ClearFlags.Target,Color.Blue,1.0f,0);

            //シーンの開始
            device_.BeginScene();

            font_.DrawText(null
                ,"Managed DirectX 実践入門",10,10,Color.White);

            font_.DrawText(null
                ,"文字を表示してみる",10,26,Color.YellowGreen);


            device_.EndScene();

            try
            {
                //更新
                device_.Present();
            }
            catch(DeviceLostException)
            {
                resetDevice();
            }

        }

        /// <summary>
        /// デバイスのリセットを行う
        /// </summary>
        private void resetDevice()
        {
            int result;
            if(!device_.CheckCooperativeLevel(out result))
            {
                if(result ==(int)ResultCode.DeviceLost)
                {
                    //ちょっと待つ
                    System.Threading.Thread.Sleep(10);
                }
                else if(result ==(int)ResultCode.DeviceNotReset)
                {
                    device_.Reset(presentParam_);
                }
            }
        }
    }

    /// <summary>
    /// エントリクラス
    /// </summary>
    class Program
    {
        public static void Main()
        {
            using(md3d2 dxform =new md3d2())
            {
                if(!dxform.DXInitialize())
                {
                    MessageBox.Show("Diret3Dの初期化に失敗しました。"
                        ,"初期化の失敗");
                    return;
                }
                dxform.Show();

                while(dxform.Created)
                {
                    dxform.Render();
                    Application.DoEvents();
                }
            }
        }
    }
}

Fontの作成

文字を表示するためには文字の書体や大きさを設定しなければいけません。

/// <summary>
/// フォントの作成
/// </summary>
private void createFont()
{
    FontDescription fd =new FontDescription();

    fd.Height = 16;
    fd.FaceName = "MS ゴシック";

    font_ = new Microsoft.DirectX.Direct3D.Font(device_,fd);
}

直接フォントも作成できますが、めんどくさくなるので、「FontDescription」という構造体を作ってからフォントを作成します。

FontDescription

文字のサイズは「height」で調整します。どのような書体を使うかは「FaceName」で指定します。

フォントの描画

フォントの描画は「Font.DrawText」で行います。一番簡単な引数の指定は次のです。

public int DrawText(
    Sprite sprite,
    string text,
    int x,
    int y,
    Color color
);

ほとんどまんまです。1つ注意をあげれば、「sprite」の所でnullを指定すると、直接描画できるというところです。スプライトに描画したいときはスプライトを指定してみてください。



今回もサクッと出来ました。次回は、Z値のあるスプライト描画を行ってみましょう。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-4-15
[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>スプライト(Sprite)