2013-10-23 23 views
0

鼠标没有移动鼠标指针/光标卡在中间和口吃/跳舞/摇动。为什么当试图走动360C度鼠标鼠标光标在中间口吃?

这是我使用的鼠标输入代码:

private void ProcessInputCamera(float amount) 
    { 
     previousState = currentState; 
     currentState = Mouse.GetState(); 
     MouseState currentMouseState = Mouse.GetState(); 
     if (currentMouseState != originalMouseState) 
     { 
      float xDifference = currentMouseState.X - originalMouseState.X; 
      float yDifference = currentMouseState.Y - originalMouseState.Y; 
      leftrightRot -= rotationSpeed * xDifference * amount; 
      updownRot -= rotationSpeed * yDifference * amount; 
      Mouse.SetPosition(GraphicsDevice.Viewport.Width/2, GraphicsDevice.Viewport.Height/2); 
     } 

     Vector3 moveVector = new Vector3(0, 0, 0); 
     KeyboardState keyState = Keyboard.GetState(); 
     if (keyState.IsKeyDown(Keys.Up) || keyState.IsKeyDown(Keys.Up)) 
      moveVector += new Vector3(0, 0, -1); 
     if (keyState.IsKeyDown(Keys.Down) || keyState.IsKeyDown(Keys.Down)) 
      moveVector += new Vector3(0, 0, 1); 
     if (keyState.IsKeyDown(Keys.Right) || keyState.IsKeyDown(Keys.Right)) 
      moveVector += new Vector3(1, 0, 0); 
     if (keyState.IsKeyDown(Keys.Left) || keyState.IsKeyDown(Keys.Left)) 
      moveVector += new Vector3(-1, 0, 0); 
     if (keyState.IsKeyDown(Keys.Q)) 
      moveVector += new Vector3(0, 100, 0); 
     if (keyState.IsKeyDown(Keys.Z)) 
      moveVector += new Vector3(0, -100, 0); 
     AddToCameraPosition(moveVector * amount); 
    } 

    private void AddToCameraPosition(Vector3 vectorToAdd) 
    { 
     Matrix cameraRotation = Matrix.CreateRotationX(updownRot) * Matrix.CreateRotationY(leftrightRot); 
     Vector3 rotatedVector = Vector3.Transform(vectorToAdd, cameraRotation); 
     cameraPosition += moveSpeed * rotatedVector; 
     UpdateViewMatrix(viewMatrix); 
    } 

    private void UpdateViewMatrix(Matrix viewMatrix) 
    { 
     Matrix cameraRotation = Matrix.CreateRotationX(updownRot) * Matrix.CreateRotationY(leftrightRot); 

     Vector3 cameraOriginalTarget = new Vector3(0, 0, -1); 
     Vector3 cameraRotatedTarget = Vector3.Transform(cameraOriginalTarget, cameraRotation); 
     Vector3 cameraFinalTarget = cameraPosition + cameraRotatedTarget; 

     Vector3 cameraOriginalUpVector = new Vector3(0, 1, 0); 
     Vector3 cameraRotatedUpVector = Vector3.Transform(cameraOriginalUpVector, cameraRotation); 

     viewMatrix = Matrix.CreateLookAt(cameraPosition, cameraFinalTarget, cameraRotatedUpVector); 
    } 

的关键正在他们正在旋转的地形。 但随着鼠标我想能够改变我的观点360度像第一人称视角看看周围不旋转的地形,而不是旋转的对象,但让我看看360c。

的问题是,这条线:

Mouse.SetPosition(GraphicsDevice.Viewport.Width/2, GraphicsDevice.Viewport.Height/2); 

出于某种原因,使鼠标cursour卡在中间和舞蹈/抖动/口吃。 如果我取消这条线没有使用它,然后将鼠标移动顺畅,但它dosent动弹分毫360C度我可以移动鼠标光标定期。

的问题是,为什么我不能在第一人称射击游戏移动鼠标360C样的?

这是公吨Game1.cs代码包括相机代码我标记它。 http://pastebin.com/SF3iiftq

回答

2
Mouse.SetPosition(GraphicsDevice.Viewport.Width/2, GraphicsDevice.Viewport.Height/2); 

此线设置鼠标光标位置到屏幕的中心。宽度/ 2和高度/ 2是屏幕中心的坐标。这条线在每个游戏循环中执行一次,因此它一直将光标位置设置回中心。这就是为什么鼠标卡在中心并在您尝试移动时摇晃的原因。

+0

好的,所以我删除了这一行,即时更新它与这条线只有一次在LoadContent方法。现在为什么当我将鼠标左右移动到360度时呢?我看到鼠标光标正常移动?它做所有的部分ProcessInputCamera方法,但鼠标不是我的观点360c像第一人称射击游戏。就像在这个演示中一样:http://www.dhpoware.com/demos/xnaFirstPersonCamera.html –

+0

在看了代码的功能后,该行应该在那里。应该将鼠标重置到屏幕的中心。我无法帮助你。 –