XNA鼠标移动

我之前在XNA做了几场比赛,我即将开始一个新项目。 我想做的一件事就是让鼠标移动。

只是为了澄清(因为我看到一些类似的问题导致混乱)我想得到鼠标的运动。 不是光标的位置或从一帧到下一帧的位置变化。 我只想了解鼠标移动方式的数据。

在我之前的游戏中,我只需将(隐藏)光标重置到视口中间并查看位置的变化。 然而,这似乎有点作弊,并导致我的代码中的一些混乱的计算。

那么有没有办法让鼠标移动返回程序?

谢谢,马特

编辑:

回应第一条评论。 在这种情况下,我所指的光标位置是鼠标指针的屏幕位置。 我所指的鼠标的移动是在物理上移动鼠标。

XNA似乎有一个单词mouse与指针(或光标)同义。

我遇到的问题是,尽管鼠标向左移动,但由于光标位于屏幕边缘,我无法在程序中获得该移动。

MouseState类仅包括鼠标光标的位置等。 如您所述,此位置将剪切到屏幕边缘。 除了通过MouseState类之外,无法确定用户是否移动了鼠标。 特别是,没有MouseDirection,MouseTangent或MouseAngle属性指示鼠标移动的方向。

作为一种变通方法,您可以调用SetPosition强制光标位于屏幕中间,这样您就可以随时知道鼠标移动的方向。 事实上,SetPosition甚至推荐这种方法:

当使用此方法获取相对输入时,例如在第一人称游戏中,将鼠标的位置设置为每帧的游戏窗口的中心。 这将允许您以最大的粒度读取两个轴上的鼠标移动。

我对XNA的理解非常有限,因为游戏开发不是我的主要开发方式。

话虽如此,根据我对XNA的好处的理解,你真的需要计算帧之间位置的变化,看看鼠标移动了多少。

通过XY坐标的变化,您可以基于这个简单的度量获得所有类型的数据。

如果你想要鼠标的实际运动,你可以创建一个数组或鼠标最后一次移动列表,重置给定的事件,例如。 elapsedtime > 1fIsMouseReleased 。 它看起来像这样:

 List Movement = new List(); public override void Update(GameTime gameTime) { MouseState pms; MouseState ms = Mouse.GetState(); pms = ms; Movement.Add(pms.X - ms.X, pms.Y - ms.Y); if(ms.LeftButton == ButtonState.Released){ Movement.Clear(); } base.Update(gameTime); }