WPF 3Dプログラミング

第4回「WPFでキャラ移動」の巻

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

先生「Visual StudioのC#(以後『VC#』)を起動してください。
『ファイル>新しいプロジェクト』メニューを選び、『WPF アプリケーション』で、プロジェクト名をデフォルトの『WpfApplication1』で『OK』します。
そして、前回の『Swordsman.xaml』を『秀丸』などのテキストエディタで開き『編集>全てを選択』メニューで全選択し『右クリック>コピー』メニューでコピーします。
それを、またVC#で『Windows1.xaml』が開かれているので、以下の赤字の部分にペーストしてください」

‹Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"›
    ‹Grid›
        コピーしたものをここにペースト
    ‹/Grid›
‹/Window›
WPF 3Dプログラミング



先生
タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「VC#で『デバッグ>デバッグ開始』メニューを実行すると、剣士が剣を振るアニメーションをしています」



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

ツカサ「これをカーソルキーで動かせるといいな」 WPF 3Dプログラミング



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

先生「では剣士キャラを移動してみましょう。
『Windows1.xaml.cs』ファイルを開いて以下の赤字をコーディングしてください」

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
//3Dが使えるようにする
using System.Windows.Media.Media3D;//追加
//タイマーが使えるようにする
using System.Windows.Threading;//追加

namespace WpfApplication1
{
    /// ‹summary›
    /// Window1.xaml の相互作用ロジック
    /// ‹/summary›
    public partial class Window1 : Window
    {
        //タイマー
        private DispatcherTimer intervalTimer = new DispatcherTimer();
        //キャラの位置
        Vector3D pos = new Vector3D(0, 0, 0);

        public Window1()
        {
            InitializeComponent();

            //30ミリ秒ごとに、『Update3DEvent』関数を呼び出す
            intervalTimer.Interval = TimeSpan.FromMilliseconds(30);
            intervalTimer.Tick += new EventHandler(Update3DEvent);
            intervalTimer.Start();
        }

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            //X座標を10ずつ加算
            pos.X += 10;
            //3D行列
            Matrix3D m = new Matrix3D();
            //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プログラミング

先生「大丈夫。意味はわからなくても、見よう見真似でZ方向やY方向に移動してみてください。
赤ちゃんに最初から日本語の文法を教える人はいないでしょう?プログラミングも一緒で、最初は模倣から改造して覚えていけばいいのです」
WPF 3Dプログラミング



先生
タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「『pos.X += 10;』の部分を『pos.Z += 10;』にしたら、剣士キャラが手前に向かってきました!」



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

先生「では、カーソルキーで操作してみます。
以下の赤字の部分をコーディングしてみてください。『→』キーで移動します」

        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                pos.X += 10;
            }
            //3D行列
            Matrix3D m = new Matrix3D();
            //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プログラミング タクヤ「真似をして、『←』『↑』『↓』キーでも移動するようにしました!」

        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                pos.X += 10;
            }
            if (Keyboard.IsKeyDown(Key.Left))
            {
                pos.X -= 10;
            }
            if (Keyboard.IsKeyDown(Key.Up))
            {
                pos.Z -= 10;
            }
            if (Keyboard.IsKeyDown(Key.Down))
            {
                pos.Z += 10;
            }
            //3D行列
            Matrix3D m = new Matrix3D();
            //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プログラミング

先生「さらに剣士キャラの向きも変えましょう。
以下の赤字の部分をコーディングしてみてください」

    public partial class Window1 : Window
    {
        //タイマー
        private DispatcherTimer intervalTimer = new DispatcherTimer();
        //キャラの位置
        Vector3D pos = new Vector3D(0, 0, 0);
        //キャラの向き
        float angle = 0;

        public Window1()
        {
            InitializeComponent();

            //30ミリ秒ごとに、『Update3DEvent』関数を呼び出す
            intervalTimer.Interval = TimeSpan.FromMilliseconds(30);
            intervalTimer.Tick += new EventHandler(Update3DEvent);
            intervalTimer.Start();
        }

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Right))
            {
                angle = 90;
                pos.X += 10;
            }
            if (Keyboard.IsKeyDown(Key.Left))
            {
                angle = 270;
                pos.X -= 10;
            }
            if (Keyboard.IsKeyDown(Key.Up))
            {
                angle = 180;
                pos.Z -= 10;
            }
            if (Keyboard.IsKeyDown(Key.Down))
            {
                angle = 0;
                pos.Z += 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プログラミング



先生

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