所以我有X,Y和Z变量以及lookAt.X
,lookAt.Y
和lookAt.Z
。 lookAt
是玩家正在寻找的向量。 X,Y和Z是玩家所在的位置。我通过执行以下操作来添加轮换:
// Update rotation
if (key.IsKeyDown(Keys.Left))
rotation += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Right))
rotation -= (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Up) && Math.Cos(rotation2) <= 0.8f)
rotation2 += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (key.IsKeyDown(Keys.Down) && Math.Cos(rotation2) >= -0.8f)
rotation2 -= (float)gameTime.ElapsedGameTime.TotalSeconds;
// Calculate lookAt from rotation
lookAt.X = (float)Math.Cos(rotation);
lookAt.Y = (float)Math.Sin(rotation);
lookAt.Z = (float)Math.Cos(rotation2);
现在我要做的就是让玩家在他们看的地方移动,就像在第一人称射击游戏中一样。另外,我通过执行以下操作制作视图矩阵:
view = Matrix.CreateLookAt(new Vector3(X - 10, Y - 10, Z - 10), new Vector3(lookAt.X, lookAt.Y, lookAt.Z), Vector3.UnitZ);
如果有人需要任何额外的代码,请问。谢谢!
答案 0 :(得分:1)
如果lookAt
指向您所看到的方向,您只需Normalize
它并使用该方向移动您的播放器。
答案 1 :(得分:0)
这是官方的答案,pinckerman说:
"lookAt points in the direction you look at, can't you simply Normalize it and use that direction to move your player? – pinckerman 28 mins ago"
我试过这个,这是一个有效的答案。感谢他,我希望这会有所帮助。