2013-02-19 66 views
0

我使用的是XNA的相机类Seabase Alpha,它效果很好,我根本不需要修改它。但是,如果我同时横向拍摄和偏航,它会改变我的拍摄方向,我无法弄清楚如何“锁定”它,使其永远不会滚动。 (类似第一人称射击游戏,它只能扫射,推力,并调整它的俯仰和偏航。)XNA 3D相机滚动

我对调用类代码如下:

 if (gamepadState.ThumbSticks.Right.X != 0) 
     { 
      // Look Around 
      camera.Yaw(-gamepadState.ThumbSticks.Right.X); 
     } 
     if (gamepadState.ThumbSticks.Right.Y != 0) 
     { 
      // Look Around 
      camera.Pitch(-gamepadState.ThumbSticks.Right.Y); 
     } 
     if (gamepadState.ThumbSticks.Left.X != 0) 
     { 
      // Move Around 
      camera.StrafeHorz(-gamepadState.ThumbSticks.Left.X); 
     } 
     if (gamepadState.ThumbSticks.Left.Y != 0) 
     { 
      // Move Around 
      camera.Thrust(gamepadState.ThumbSticks.Left.Y); 
     } 
     if (gamepadState.Buttons.LeftShoulder == ButtonState.Pressed) 
     { 
      camera.StrafeVert(0.2f); 
     } 
     if (gamepadState.Buttons.RightShoulder == ButtonState.Pressed) 
     { 
      camera.StrafeVert(-0.2f); 
     } 

我试图迫使将相机类中的矢量设置为Vector(0, 0, 1)Vector(0, 1, 0)。将Z设置为1有点帮助,但它仍然能够滚动。

+0

你有没有尝试重新排序你的if语句首先执行循环,然后执行循环?这会导致单帧的旋转与strafe滞后,但我不认为这会影响你的输入,假设你的游戏状态每秒更新至少20次。 – 2013-02-19 18:38:48

+0

可悲的是,这仍然发生:http://i.imgur.com/zPFcT6F.png – 2013-02-19 18:41:11

+0

[Camera3D](https://github.com/Andrusza/PiratesArr/tree/part-3/Pirates/Pirates/Copy% 20%20FirstPersonCamera)这是我的3D相机。 – user1075940 2013-02-19 20:14:13

回答

0

如果你没有在相机不断实现滚动意图,这将是最好修改像这样的海上基地代码:

public Matrix ViewMatrix 
{ 
    get 
    { 
     return Matrix.CreateLookAt(Position, Forward+Position, Vector3.Up);//changed the 3rd param from Up toVector3.Up 
    } 
} 

这将抑制您所遇到的任意轧辊。但也会妨碍你实施滚动。