我必须道歉,因为这似乎是一个如此简单的问题,但我一直试图让它工作多年。
我有一个精灵和两个Vector2变量,我想要一个精灵从一个vector2移动到另一个。
任何帮助都会很棒。感谢。
此代码适用于我,但每次点击都会进行一次小动作
//CurPos is the sprite current Position and DestPos is the Destination Position
Vector2 StepAnm = (CurPos - DestPos) / 60;
并在更新功能中
if (currentMouseState.LeftButton ==Microsoft.Xna.Framework.Input.ButtonState.Pressed&&lastMouseState.LeftButton ==Microsoft.Xna.Framework.Input.ButtonState.Released)
{
if ((int)CurPos.X != (int)DestPos.X)
{
CurPos.X -= StepAnm.X;
}
}
答案 0 :(得分:0)
以下是使用Update
方法的示例。
以下内容需要在此代码之外设置
Vector2 destPos;
Vector2 stepAnm; //Needs to be set when destPos is updated
float duration; //Could be dependent on distance or not
protected override void Update(GameTime gameTime)
{
float elapsedSeconds = (float)gameTime.ElapsedGameTime.TotalSeconds;
float moveAmount = elapsedSeconds / duration;
Vector2 movement = stepAnm * moveAmount;
//This should fix going too far
if (movement.LengthSquared() > destPos.DistanceSquared(curPos))
{
curPos = destPos;
}
else
{
curPos += stepAnm * moveAmount; //+= or -= depending on how you calculate stepAnm
}
}
如果您使用的是恒速系统,您可能需要稍微更改一下。我包括了更常规的基于持续时间的系统。