だから信頼性は皆無ですってww
XNAとは
- マイクロソフトによって提供された、ゲーム開発のためのツールである。
- C#で開発する。
- 筆者はMicrosoft Visual C# 2005 Express Editionで開発中。
- Windows用、Xbox360用にコンパイル可能。
インストール
プロジェクト作成
メニューバーから、
ファイル→新規作成→プロジェクト
XNA Game Studio 2.0から、
Windows Game(2.0)を選択
プロジェクト名を入力。
テンプレートの出来上がり。
public class Game1 : Microsoft.Xna.Framework.Game
以下の関数がテンプレートとして用意されます。
public Game1()
コンストラクタ。
ボクはデフォルトからいじってません。
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
初期化関数。
コンストラクタと Initialize() メソッドの違いは、あるらしいが今は関係なさそうなのでほおっておく。
このあたりの初期化処理内部でごちゃごちゃやってます。
protected override void Initialize()
{
// TODO: Add your initialization logic here
game = this;
TaskListmng.CreateInstance();
Mapmng.CreateInstance();
base.Initialize();
}
protected override void LoadContent()
音とか、画像とかを読み込みなさいと言っている。
ボクはフォントなど、ゲームで一貫して使うリソースの読み込みと、デバッグ用のコードを(デバッグ用主人公作成とか)足したものを使用している。
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
sysfont = Content.Load<SpriteFont>("Arial");
spriteBatch = new SpriteBatch(this.GraphicsDevice);
// 見た目の200,200にHeroを作成
CharactorFactory.Instance.CreateCharactor(
new task.Hero(new Vector2(600, 200), 64, 64, new Vector2(0, 0), 100, SpriteEffects.None),
new HeroState());
// 見た目の200,200にtekiを作成
CharactorFactory.Instance.CreateCharactor(
new task.Enemy(new Vector2(600, 300), 64, 64, 10, 2, SpriteEffects.FlipVertically),
new CharctorNoMoveStrategy());
// FPSカウンタを作成
TaskListmng.Instance.Add(
TaskListmng.TaskType.Effect,
new task.FpsCounter());
}
protected override void UnloadContent()
破棄作業はXNAがやってくれるはずなので、何もしない。
protected override void Update(GameTime gameTime)
デフォルトのコードに、全タスクの実行コードを足しただけ。
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
TaskListmng.Instance.Update(gameTime); // 全タスクの実行
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
デフォルトのコードに、スプライトバッチ処理開始終了と全タスクの描画コードを足しただけ。
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin(); // スプライトバッチ処理開始
TaskListmng.Instance.Draw(gameTime); // 全タスクの描画
spriteBatch.End(); // スプライトバッチ終了
base.Draw(gameTime);
}
つまり、ほとんどの処理をほかのクラスで動かして、こっちはすっきりさせましょう作戦。
リソース管理
最終更新:2009年01月14日 00:24