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
好的,所以我删除了这一行,即时更新它与这条线只有一次在LoadContent方法。现在为什么当我将鼠标左右移动到360度时呢?我看到鼠标光标正常移动?它做所有的部分ProcessInputCamera方法,但鼠标不是我的观点360c像第一人称射击游戏。就像在这个演示中一样:http://www.dhpoware.com/demos/xnaFirstPersonCamera.html –
在看了代码的功能后,该行应该在那里。应该将鼠标重置到屏幕的中心。我无法帮助你。 –