TOP

ただいま開発中です

フォローはどうぞお気楽に!

SoundCloud (ゲームBGM集)

今後、力をいれていきます。

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

[TOP] [xna学習日記TOP] [前へ] [次へ]
2009年04月07日:第6話:補足

第4話:コンテント・パイプラインの補足。

プログラム中で直接操作しないリソースは、コンテント・パイプラインを使って組み込まなくても構わないようだ。

サンプル用の立体モデルのテクスチャ(ビットマップファイル「sample_txr.bmp」)は、プログラム中で操作することはまず無いだろう。
そこで、コンテンツ・パイプラインから削除してみることにした。

まずは、ソリューション・エクスプローラから、ファイル「sample_txr.bmp」を選んで、右クリック→削除

これで、コンテンツ・パイプラインから「sample_txr.bmp」があっさり削除された。
ただし、それと連動して、実際にプロジェクト内のフォルダにコピーされていたファイル本体も削除されてしまう。
よって、改めてエクスプローラ等のファイラを使って、手動でファイルをコピペしなければならないようだ。

まずは、エクスプローラを起動。
test1\WindowsGame1\Contentフォルダに、ファイル「sample_txr.bmp」を貼り付ける。

そして、ソリューション・エクスプローラをチェックしてみると・・・
貼り付けたファイル名が反映されない。←それてOK。

再び、デバッグ開始。
無事に立体モデルが描画された。

2009年04月09日:第7話:立体モデルの移動

第5話:立体モデルの描画で作成した、立体モデルを描画するサンプルコードに、今回は立体モデルを平行移動させるコードを追加してみた。

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ターン
}


[TOP] [xna学習日記TOP] [前へ] [次へ]
〜 様々なデジタルコンテンツを制作しています 〜
MUKAGOSOFTWARE DEVELOPMENT
XBOX360の開発環境「XNA Game Studio」を弄くってみる・・・
xna学習日記