我的应用程序有一个自定义面板,用于在 WinForm 中显示 XNA 屏幕。我目前已经展示了一个没有问题的测试模型,现在正在研究相机移动。我的相机是一个免费相机(不受任何特定目标的约束),但我一直无法让鼠标更新相机在其自身轴上的偏航和俯仰。我认为我的更新方法可能有问题,但事实并非如此,因为相机使用向前和向后更新KeyboardState
。但我不知道为什么MouseState
不工作。
FreeCamera.cs
using XNAButtonState = Microsoft.Xna.Framework.Input.ButtonState;
....
MouseState pastMouseState;
private float rotationSpeed_ = 1f / 60f;
private float yaw_, pitch_;
...
private void updateMatrix()
{
Matrix rotationMatrix = Matrix.CreateRotationX(pitch_) *
Matrix.CreateRotationY(yaw_);
Vector3 forward = new Vector3(0, 0, 1);
forward = Vector3.Transform(forward, rotationMatrix);
viewMatrix_ = Matrix.CreateLookAt(Position, Position + forward, Up);
projectionMatrix_ = Matrix.CreatePerspectiveFieldOfView(
MathHelper.PiOver4, 16.0f / 9.0f, 0.1f, 100000.0f);
}
private void cameraInput()
{
KeyboardState keyboardState = Keyboard.GetState(); <-- updates
currentMouseState = Mouse.GetState(); <-- not updating
if (currentMouse.LeftButton == XNAButtonState.Pressed)
pitch_ -= rotationSpeed_;
if (keyboardState.IsKeyDown(Keys.W))
move(1);
if (keyboardState.IsKeyDown(Keys.S))
move(-1);
pastMouseState = currentMouseState;
}
public void update()
{
cameraInput();
updateMatrix();
为了使用 XNA 的鼠标 API(而不是 WinForm 事件),您必须set Mouse.WindowHandle
适当地 (MSDN).
如果您正在使用official samples,然后将其放入您的MainForm
的构造函数就可以解决这个问题:
Mouse.WindowHandle = this.Handle;
(当然using Microsoft.Xna.Framework.Input;
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)