今後、力をいれていきます。
PSMゲーム
Bloodred Wyvern (ブラッドレッドワイバーン)
Bloodred Wyvern 2
Gravity Anomaly Zone 不可思議重力帯
その他
PlayStation®Mobile関連リンク集
PlayStation®Mobile学習日記
XBLIG
BLASTER AND AMETHYST
BLASTER AND MORION
LEUCISTIC WYVERN
Bioerosion
URGENT EVASION 360
The Undead Syndrome / TUS 2
Dark Storm Blast 360
その他
Making Of The Undead Syndrome[3DCG]
Making Of The Undead Syndrome2
XNA関連リンク集
xna学習日記
第1〜3話
第4〜5話
第6〜7話
第8〜9話
第10〜12話
第13〜14話
第15話
ブラウザゲーム
発火少年の地面焦がし
MAGICAL METEOR SHOWER
メタセコイア備忘録
東日本大震災(Aftermath of the 2011 Tohoku earthquake and tsunami)
ムカゴソフトウェア開発
e-mail:cqp00202@nifty.ne.jp
第4話:コンテント・パイプラインの補足。
プログラム中で直接操作しないリソースは、コンテント・パイプラインを使って組み込まなくても構わないようだ。
サンプル用の立体モデルのテクスチャ(ビットマップファイル「sample_txr.bmp」)は、プログラム中で操作することはまず無いだろう。
そこで、コンテンツ・パイプラインから削除してみることにした。
まずは、ソリューション・エクスプローラから、ファイル「sample_txr.bmp」を選んで、右クリック→削除。
これで、コンテンツ・パイプラインから「sample_txr.bmp」があっさり削除された。
ただし、それと連動して、実際にプロジェクト内のフォルダにコピーされていたファイル本体も削除されてしまう。
よって、改めてエクスプローラ等のファイラを使って、手動でファイルをコピペしなければならないようだ。
まずは、エクスプローラを起動。
test1\WindowsGame1\Contentフォルダに、ファイル「sample_txr.bmp」を貼り付ける。
そして、ソリューション・エクスプローラをチェックしてみると・・・
貼り付けたファイル名が反映されない。←それてOK。
再び、デバッグ開始。
無事に立体モデルが描画された。
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; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Model samplemodel; Vector3 model_pos = Vector3.Zero; //立体モデルの位置 bool leftmove = false; //Uターン用 public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); //モデルの読み込み samplemodel = Content.Load<Model>("sample_model"); } protected override void UnloadContent() { } // デフォルトで1/60秒固定で呼び出される protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); //x座標をマイナス方向に移動か? if (leftmove) { model_pos.X -= 0.1f; if (model_pos.X < -10.0f) leftmove = false; //Uターン } else { model_pos.X += 0.1f; if (model_pos.X > 10.0f) leftmove = true; //Uターン } base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); foreach (ModelMesh mesh in samplemodel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { //デフォルトのライティングを有効 effect.EnableDefaultLighting(); //ワールド行列を設定 //Matrix.CreateTranslationメソッドで、移動用のマトリックスを作成 effect.World = Matrix.CreateTranslation(model_pos); //ビュー行列を設定 effect.View = Matrix.CreateLookAt(new Vector3(16.0f, 8.0f, 18.0f), Vector3.Zero, Vector3.Up); //射影行列を設定 effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), GraphicsDevice.Viewport.AspectRatio, 1.0f, 10000.0f); //スペキュラカラーの設定 effect.SpecularColor = new Vector3(0.4f, 0.4f, 0.4f); } mesh.Draw(); } base.Draw(gameTime); } } }
今回、Game1クラスに、以下のメンバフィールドを追加している。
Vector3 model_pos = Vector3.Zero; //立体モデルの位置 bool leftmove = false; //Uターン用
model_posフィールドには、立体モデルの位置を格納する。
leftmoveフィールドは、立体モデルのx座標の値が減少中なのかどうか、判断する為に用意した(この値がtrueの場合、減少中・・・つまり、x座標マイナス方向に移動中)。
そして、Draw()メソッドに、ワールド行列の設定を追加した。
BasicEffectクラスのWorldプロパティに、移動用のマトリックスを代入している。
effect.World = Matrix.CreateTranslation(model_pos);
それと、カメラの位置(ビュー行列)を若干変更しておいた。
最後に、Update()メソッドに、立体モデルのx座標を増減する以下のコードを追加。
Update()メソッドは、デフォルトで1/60秒固定で呼び出されるようだ。
//x座標をマイナス方向に移動か? if (leftmove) { model_pos.X -= 0.1f; if (model_pos.X < -10.0f) leftmove = false; //Uターン } else { model_pos.X += 0.1f; if (model_pos.X > 10.0f) leftmove = true; //Uターン }