画面に文字を描く
Ponのタイトル画面は、すべて文字を描いて表現しています。凝ったゲームならばタイトル画像を別に用意した方が良いと思いますが、Ponぐらい単純なゲームでは、それよりも画面に直接文字を描いた方が、手間が少なくて済みます。
実際の描画方法を見る前に、すべてのシーンの親クラスとなっているSceneクラスから見ていきます。このクラスでは、各シーンが共通で使う機能のほか、ゲーム全体で共有するフォントの定義を行っています。
//-- タイトルなどに使う大きいサイズのフォント
SdlDotNet.Graphics.Font _font;
//-- スコア表示などに使う小さいサイズのフォント
SdlDotNet.Graphics.Font _sfont;
//== 初期化処理
//== 引数:親になるゲームクラス
public virtual void Init(Pon p)
{
parent = p;
//-- フォントの読み込みと大きさの指定
_font = new SdlDotNet.Graphics.Font("font" + Path.DirectorySeparatorChar + "mplus-2c-black.ttf", 72);
_sfont = new SdlDotNet.Graphics.Font("font" + Path.DirectorySeparatorChar + "mplus-2c-black.ttf", 24);
}
文字を画面に描画するには、上記のようにFontクラスを用いて文字の情報を確保する必要があります。この時、SdlDotNet.Graphicsをusingしていても、Fontクラスが.NET Framework自身の提供するFontクラスとバッティングしてしまうため、フルネームでクラス名を記述する必要があります。
また、描画する文字の大きさは途中で変えることができないので、利用する文字の大きさの数だけFontクラスのオブジェクトが必要になります。
今回は大きめと小さめの2種類を用意しました。
フォントファイルの読み込みについては、見える部品と同様、Fontクラスのコンストラクタにパスとフォントサイズを与えるだけでOKです。フォントサイズの単位はポイントなので、利用の際には注意してください。
Fontオブジェクトが確保できたら、タイトル画面を例に画面への描画処理を見てみます。
//== 画面の描画処理
//== 引数:画面への参照
public override void Draw(Surface s)
{
base.Draw( s );
//-- タイトル画面の描画
s.Blit(font.Render("P O N", Color.White), new Point(225, 100));
s.Blit(small_font.Render("simple teniss game.", Color.White), new Point(200, 200));
s.Blit(small_font.Render("- Press enter key to start-", Color.White), new Point(160, 330));
}
上記のように、画面への描画にはFontクラスのRenderメソッドを用います。Renderメソッドは描画する文字や色、背景色、アンチエイリアスの有無、テキストの長さや行数を受け取って、それに応じて適切な文字描画を行い、できあがったものをSurfaceクラスのオブジェクトとして返してくれるメソッドです。Ponでは、Renderメソッドが返してきたオブジェクトをscreenオブジェクトを通じてBlitし、タイトル画面を得ています。
