前回では、ウィンドウが全く描画を行っていませんでした。
そのため、XP以前の環境だと他のウィンドウに隠されると跡が残ってたいへん見苦しいものでした。
これではいけません!
このような跡はすぐに消せるようにならなければなりません。
それが出来るようになったのが、以下のコードです:
using Microsoft.Xna.Framework;
class MyGame : Game
{
GraphicsDeviceManager graphics;
public MyGame()
{
graphics = new GraphicsDeviceManager(this);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
}
static void Main()
{
using (MyGame game = new MyGame())
{
game.Run();
}
}
}
このプログラムは、一秒間に60回背景を空色で塗りつぶしています。
それをやっているのがDrawメソッドですが、こいつは一秒間に大体60回呼ばれるのです。
これだけひんぱんに背景を消しているので、もう他のウィンドウに隠されても大丈夫です。
(Vista以降だと何もしなくても大丈夫ですが)
さて、注目すべきは一秒間に60回塗りつぶしているという部分です。
XP以前の普通のプログラム、WindowsFormsなどでは、他のウィンドウに隠れたときなど、描画すべきときにしか描画しませんでした。
しかし、XNAではそのようにはしません。
狂ったように、何も変化が無くても、とりあえず60回描画します。
ゲームプログラミングとは、そのようなものだということです。
もう少し細かいところに注目してみましょう。
このプログラムでは、まずMicrosoft.Xna.Framework.GraphicsDeviceManagerのインスタンスを作成しています。
これは、ゲームのウィンドウのサイズやフルスクリーン、それと描画全般を行うGraphicsDeviceを管理するマネージャーです。
(管理(マネージ)するマネージャーとは変な表現ですが、まぁ大目に見てください)
重要なのはこのクラスというよりも、そのプロパティからアクセスできる、GraphicsDeviceです。
このGraphicsDeviceは役割としてはちょうどWin32でいうHDCやWindowsFormsやJavaのGraphicsクラスのようなものです。
つまり、描画はこれを通じて行うのです。
点を表示するにも、線を表示するにも、2D画像を表示するにも、3Dのモデルを表示するにもこのGraphicsDeviceが必要です。
(もっとも、2Dの場合はカプセル化されていて、描画の時には意識する必要はありませんが)
このプログラムではGraphicsDevice.Clearを使って、ウィンドウのクライアント領域を空色で塗りつぶしています。
もちろん色は別に空色でなくてもかまいません。
青でも赤でも黒でもかまいませんが、Xnaの多くのサンプルでは、空の色に似ているからでしょうか、Color.CornflowerBlueを使っています。
多数決の原則(?)により、次回からもColor.CornflowerBlueを使うことにします。