「クラウド型プログラミング習得スクール」通信教育とセミナーの欠点を排除し長所を融合したスクール(塾)
Top > XNA(Game API) > XNAではじめに作るゲーム

XNAではじめに作るゲーム

 

どんなゲーム?

よくある、ウィンドウ内のボールの移動で、フレームにぶつかると跳ね返るという
単純なプログラム。

 

手順と作り方

まず、新しいプロジェクトで、XNAを選んで、テンプレートからWindowsゲームを選択して、
プロジェクトを作成。

このままビルド&実行すると、何もしないウィンドウが表示される。

 

テンプレートで作成されたコードをチェック

Windowsアプリケーションで同じみのMainメソッドがちょっ違う。

Program.cs
static void Main(string[] args)
{
    using (Game1 game = new Game1())
    {
        game.Run();
    }
}

Game1クラスの親はGameクラス。インスタンス化して成功したら
単純にRunメソッドを呼び出しているだけ。

至ってシンプルだ。

 

Game1.cs

Microsoft.Xna.Framework.Gameクラスを継承し、必要な処理は
Gameクラスのメソッドをoverrideして記述する構造になっている。

プロジェクトを作成すると、Game1.csには下記のメソッドが生成されている。

メソッド 概要
public Game1() コンストラクタ
protected override void Initialize() 初期化(baseクラスは必須)
protected override void LoadContent() リソースのロード処理など
protected override void UnloadContent() リソースのアンロード処理など
protected override void Update(GameTime gameTime) 更新
protected override void Draw(GameTime gameTime) 描画

 

それぞれのメソッドが呼び出されるタイミングを調べてみた。

Main()からGame1.Run()メソッドが呼び出されると、

  1. Initialize()
  2. LoadContent()
  3. Update()
  4. Update()
  5. Draw()
  6. Update()
     ・
     ・
    Update()
  7. Update()
  8. Draw()
  9. Update()
  10. Draw()
  11. Update()
  12. Draw()

終了するまで繰り返す

終了時点でUnloadContent()が呼び出される。

タイミングは、オペレーションではなくて、Gameクラス側が呼び出すため、
これ以上の詮索はできなかった。

因みに、Gameクラスのソースコードの表示を試してみたが、dllはダウンロード
できたものの、ソースコードは入っていなかった。

Update()とDraw()には、前回から今回までの時間が引数で渡ってくるので、時間を考慮する場合役に立ちそうだ。

 

「はじめに作るゲーム」

このテンプレートが基本になっているので、簡単に理解できるだろう。

全ソースコードのイメージ

リソースの扱い

一般的なWindowsアプリケションと違うのはリソースの扱いだ。

リソースはContentに作成(コピー)する

Ball.pngで周囲を透過するように作成

 

プログラムでは、リソースを指定する場合アセット名を記述するればいい。

protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(base.GraphicsDevice);
    myTexture = base.Content.Load<Texture2D>("Ball");
}

アセット(英語ではasset):和訳すると、資産、財産ということらしいが・・・

 

base.Content.Load<クラス名>

次のファイル形式に対応している。

クラス名 サポートファイル(拡張子)
Effect Class .fx
Model Class .fbx、 .x
SpriteFont Class .bmp、.dds、.dib、.hdr、.jpg、.pfm、.png、.ppm、.tga
Texture Class
Texture2D Class
.bmp、.dds、.dib、.hdr、.jpg、.pfm、.png、.ppm、.tga
Texture3D Class
TextureCube Class
.dds

.試してはいないけど gif の記載がないので注意しよう。

 

描画処理

描画処理も至ってシンプルになっている。

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

    spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
    spriteBatch.Draw(myTexture, spritePosition, Color.White);
    spriteBatch.End();

    base.Draw(gameTime);
}

背景色の初期化は、ここで毎回行っていた。
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

Begin-Draw[Draw,・・・]-Endは一連の流れとして覚えておこう!

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
spriteBatch.Draw(myTexture, spritePosition, Color.White);

フルカラーで着色なしの場合は Color.White を指定する

Begin()が呼び出されていない場合、例外が発生する。

spriteBatch.End();

Draw()が完了したら必ずEnd()を呼び出すこと。

ウィンドウを閉じるまで、永遠に繰り返される。

Q:キー入力はどうすればいいんだろう?

Q:マウスを有効にする方法はあるのだろうか?

▲ページトップに戻る

inserted by FC2 system