using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace LineXNA
{
/// <summary>
/// 基底 Game クラスから派生した、ゲームのメイン クラスです。
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
BasicEffect basicEffect;
List<VertexPositionColor> vertices;
List<VertexPositionColor> addVertices;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IsMouseVisible = true;
}
/// <summary>
/// ゲームが実行を開始する前に必要な初期化を行います。
/// ここで、必要なサービスを照会して、関連するグラフィック以外のコンテンツを
/// 読み込むことができます。base.Initialize を呼び出すと、使用するすべての
/// コンポーネントが列挙されるとともに、初期化されます。
/// </summary>
protected override void Initialize()
{
// TODO: ここに初期化ロジックを追加します。
basicEffect = new BasicEffect(GraphicsDevice);
basicEffect.VertexColorEnabled = true;
basicEffect.Projection = Matrix.CreateOrthographicOffCenter(0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, 0, 0, 1);
//正射影行列の作成。これにより画面のドット比と同じ空間に投影される
vertices = new List<VertexPositionColor>();
addVertices = new List<VertexPositionColor>();
base.Initialize();
}
/// <summary>
/// LoadContent はゲームごとに 1 回呼び出され、ここですべてのコンテンツを
/// 読み込みます。
/// </summary>
protected override void LoadContent()
{
// 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: this.Content クラスを使用して、ゲームのコンテンツを読み込みます。
vertices.Add(new VertexPositionColor(new Vector3(0, 0, 0), Color.White));
vertices.Add(new VertexPositionColor(new Vector3(300, 300, 0), Color.White));
vertices.Add(new VertexPositionColor(new Vector3(100, 0, 0), Color.White));
vertices.Add(new VertexPositionColor(new Vector3(100, 300, 0), Color.White));
}
/// <summary>
/// UnloadContent はゲームごとに 1 回呼び出され、ここですべてのコンテンツを
/// アンロードします。
/// </summary>
protected override void UnloadContent()
{
// TODO: ここで ContentManager 以外のすべてのコンテンツをアンロードします。
}
/// <summary>
/// ワールドの更新、衝突判定、入力値の取得、オーディオの再生などの
/// ゲーム ロジックを、実行します。
/// </summary>
/// <param name="gameTime">ゲームの瞬間的なタイミング情報</param>
MouseState mouseState, mouseStatePrev;
protected override void Update(GameTime gameTime)
{
// ゲームの終了条件をチェックします。
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: ここにゲームのアップデート ロジックを追加します。
mouseStatePrev = mouseState;
mouseState = Mouse.GetState();
Window.Title = mouseState.ToString();
if (mouseStatePrev.LeftButton == ButtonState.Pressed && mouseState.LeftButton == ButtonState.Released)
{
addVertices.Add(new VertexPositionColor(new Vector3(mouseState.X, mouseState.Y, 0), Color.Red));
}
if (addVertices.Count >= 3) addVertices.Clear();
base.Update(gameTime);
}
/// <summary>
/// ゲームが自身を描画するためのメソッドです。
/// </summary>
/// <param name="gameTime">ゲームの瞬間的なタイミング情報</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: ここに描画コードを追加します。
basicEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineList, vertices.ToArray(), 0, 2);
if (addVertices.Count >= 2)
{
GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineList, addVertices.ToArray(), 0, 1);
}
base.Draw(gameTime);
}
}
}
最終更新:2012年08月09日 21:47