XNA鼠标移动

时间:2011-08-08 10:40:42

标签: c# visual-studio-2010 xna

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

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

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

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

谢谢, 马特

编辑:

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

XNA似乎将鼠标一词与指针(或光标)同义。

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

3 个答案:

答案 0 :(得分:3)

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

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

  

使用此方法进行相对输入时,例如a   第一人称游戏,将鼠标的位置设置为你的中心   游戏窗口每一帧。这将允许您阅读鼠标移动   两个轴都具有最大的粒度。

答案 1 :(得分:0)

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

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

通过X-Y坐标的变化,您可以根据这个简单的度量获得所有类型的数据。

答案 2 :(得分:-3)

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

List<Vector2> Movement = new List<Vector2>();    

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);
}