鼠标移动失去精灵
本文关键字:精灵 失去 移动 鼠标 | 更新日期: 2023-09-27 18:17:47
我在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);
}
我建议这样处理:
如果鼠标左键单击球(使用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);
}