WPF 3Dプログラミング

第5回「キャラを向いた方向に移動」の巻

WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「今度はVC#で『←』『→』キーでキャラを左右に回転させます。
前回のプロジェクトの続きで、以下の赤字のようにコーディングしてください」

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                //キャラの角度を減算
                angle -= 10;
                //0度を下回ったら360度加算
                if (angle < 0)
                {
                    angle += 360;
                }
            }
            if (Keyboard.IsKeyDown(Key.Left))
            {
                //キャラの角度を加算
                angle += 10;
                //1回転したら360度減算
                if (angle >= 360)
                {
                    angle -= 360;
                }
            }
            //3D行列
            Matrix3D m = new Matrix3D();
            //回転
            Quaternion q = new Quaternion(new Vector3D(0, 1, 0), angle);
            //回転を3D行列にセット
            m.Rotate(q);
            //3D行列に平行移動した位置posをセット
            m.OffsetX = pos.X;
            m.OffsetY = pos.Y;
            m.OffsetZ = pos.Z;
            //3D行列を3D変形行列にセット
            MatrixTransform3D trans = new MatrixTransform3D(m);
            //剣士キャラに移動した変形行列をセット
            Character_Swordsman_Swordsman.Transform = trans;
        }
            
WPF 3Dプログラミング



先生
タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「VC#で『デバッグ>デバッグ開始』メニューを実行すると、『←』『→』キーで剣士を回転できました!
今度は向いた方向に前進後退させたいです」




WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「そのつもりです。
まず前進です。
以下の赤字のようにコーディングしてください」

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                //キャラの角度を減算
                angle -= 10;
                //0度を下回ったら360度加算
                if (angle < 0)
                {
                    angle += 360;
                }
            }
            if (Keyboard.IsKeyDown(Key.Left))
            {
                //キャラの角度を加算
                angle += 10;
                //1回転したら360度減算
                if (angle >= 360)
                {
                    angle -= 360;
                }
            }
            //ディグリーからラジアンへ変換
            float radian = toRadian(angle);
            if (Keyboard.IsKeyDown(Key.Up))
            {
                //向いた方向へXとZ座標を加算
                pos.X += (float)(Math.Sin(radian) * 10);
                pos.Z += (float)(Math.Cos(radian) * 10);                
            }
            //3D行列
            Matrix3D m = new Matrix3D();
            //回転
            Quaternion q = new Quaternion(new Vector3D(0, 1, 0), angle);
            //回転を3D行列にセット
            m.Rotate(q);
            //3D行列に平行移動した位置posをセット
            m.OffsetX = pos.X;
            m.OffsetY = pos.Y;
            m.OffsetZ = pos.Z;
            //3D行列を3D変形行列にセット
            MatrixTransform3D trans = new MatrixTransform3D(m);
            //剣士キャラに移動した変形行列をセット
            Character_Swordsman_Swordsman.Transform = trans;
        }

        //ディグリー(度)からラジアンへ変換
        private float toRadian(float degree)
        {
            return (float)((float)degree / 360 * Math.PI * 2);
        }
            
WPF 3Dプログラミング



先生

タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「見よう見真似で『↓』キーで後退できるようにしました」

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                //キャラの角度を減算
                angle -= 10;
                //0度を下回ったら360度加算
                if (angle < 0)
                {
                    angle += 360;
                }
            }
            if (Keyboard.IsKeyDown(Key.Left))
            {
                //キャラの角度を加算
                angle += 10;
                //1回転したら360度減算
                if (angle >= 360)
                {
                    angle -= 360;
                }
            }
            //ディグリーからラジアンへ変換
            float radian = toRadian(angle);
            if (Keyboard.IsKeyDown(Key.Up))
            {
                //向いた方向へXとZ座標を加算
                pos.X += (float)(Math.Sin(radian) * 10);
                pos.Z += (float)(Math.Cos(radian) * 10);
            }
            if (Keyboard.IsKeyDown(Key.Down))
            {
                //向いた方向へXとZ座標を減算
                pos.X -= (float)(Math.Sin(radian) * 10);
                pos.Z -= (float)(Math.Cos(radian) * 10);
            }
            //3D行列
            Matrix3D m = new Matrix3D();
            //回転
            Quaternion q = new Quaternion(new Vector3D(0, 1, 0), angle);
            //回転を3D行列にセット
            m.Rotate(q);
            //3D行列に平行移動した位置posをセット
            m.OffsetX = pos.X;
            m.OffsetY = pos.Y;
            m.OffsetZ = pos.Z;
            //3D行列を3D変形行列にセット
            MatrixTransform3D trans = new MatrixTransform3D(m);
            //剣士キャラに移動した変形行列をセット
            Character_Swordsman_Swordsman.Transform = trans;
        }
            




WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

ツカサ「タクヤさん、凄いですね!
私は先生に言われたことしかわかりませんでした・・・」
WPF 3Dプログラミング



天使
タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「僕も見よう見真似だよ。
先生も意味はわからなくてもいいって言ってたよね」




WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「そうです。最初は真似するだけでいいんです。後から意味がわかってくるものです。
今までのプロジェクトはここまで」
WPF 3Dプログラミング



先生

前のページへ HOME 1 2 3 4 5 6 7 8 9 次のページへ