我在xna 2D精灵中进行了一个简单的测试,并试图用鼠标移动它,它可以工作但是如果我移动它有点快,精灵在途中丢失,我按下左按钮,当我回来对精灵来说,拖延继续......
我想知道为什么如果我移动得快一点我会丢失我的精灵???
这是我的移动逻辑:
MouseState ms = Mouse.GetState();
if ((ButtonState.Pressed == Mouse.GetState().LeftButton) && myBall.RectObject.Intersects(new Rectangle(ms.X, ms.Y, 0, 0)))
{
myBall.RectObject = new Rectangle(ms.X - myBall.RectObject.Width / 2, ms.Y - myBall.RectObject.Height / 2, myBall.RectObject.Width, myBall.RectObject.Height);
}
答案 0 :(得分:1)
我建议像这样处理:
如果鼠标左键单击球(使用OP中的if语句),则将球标记为被拖动(在对象上拖动一个简单的'bool;')
如果不管位置如何都不随时点击鼠标,请将球标记为未被拖动。
如果正在拖动球,请跳到鼠标位置(使用OP中if块中的代码)
(所有功能都在你已经使用的相同功能中)
编辑:这里是一些示例代码,以防我没有清楚解释
MouseState ms = Mouse.GetState();
if ((ButtonState.Pressed == Mouse.GetState().LeftButton))
{
if (myBall.RectObject.Intersects(new Rectangle(ms.X, ms.Y, 0, 0)))
{
myball.dragged = true;
}
}
else
{
myball.dragged = false;
}
if (myball.dragged)
{
myBall.RectObject = new Rectangle(ms.X - myBall.RectObject.Width / 2, ms.Y - myBall.RectObject.Height / 2, myBall.RectObject.Width, myBall.RectObject.Height);
}