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