直线移动精灵

时间:2012-03-20 22:33:05

标签: c# xna

我必须道歉,因为这似乎是一个如此简单的问题,但我一直试图让它工作多年。

我有一个精灵和两个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; 
    } 
}

1 个答案:

答案 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
    }
}

如果您使用的是恒速系统,您可能需要稍微更改一下。我包括了更常规的基于持续时间的系统。