XNA 平滑向下俯冲运动

XNA Smooth Downward Swoop Motion

(在你阅读之前,我对在这里发帖感到非常紧张,因为我之前的问题得到了很多负面回应......请尽量保持友善。我是一名学生,不能写 "Perfect" 代码)

我目前正在研究如何让一只蚊子 (Texture2D) 向下俯冲然后回到原来的位置。 目前蚊子只是在屏幕范围内左右移动,没有Y移动。

我已经通过调试器对其进行了单步调试并观察了它的 Y 坐标。我的蚊子确实是俯冲下来,然后又向上俯冲……但是,它们动作的速度如此之快,以至于人眼看不见。

因此我需要一种方法来平稳地将它们俯冲下来,以便它实际上是可见的。 我目前无法将图片嵌入到我的帖子中,但是我制作了一个 GIF 来展示我想要的效果。 Here's a link to my GIF

我尝试过的事情:

这是我更新中的移动代码。 蚊子一直向右移动,然后一直向左移动。

        internal void Update(GameTime GameTime)
        {
           position += velocity * (float)GameTime.ElapsedGameTime.TotalSeconds;

           // Reverses the direction of the mosquito if it hits the bounds
           if (position.X <= gameBoundingBox.Left ||
              position.X + animationSequence.CelWidth > gameBoundingBox.Right)
           {
               velocity.X *= -1;
           }
        }

这是我拥有的实际 Swoop() 代码...

    internal void Swoop(GameTime gameTime)
    {
        float originalYPosition = position.Y;
        bool currentlySwooping = true;

        while (currentlySwooping)
        {
            position.Y++;

            if (this.BoundingBox.Bottom >= gameBoundingBox.Bottom)
            {
                currentlySwooping = false;
            }
        }

        while (!currentlySwooping && position.Y > originalYPosition)
        {
            position.Y--;
        }
    }

我不经常在这里提问,所以如果我使用的格式不正确或提供的信息太少,我深表歉意。 如果您需要了解其他任何信息,请告诉我。

有很多方法可以实现这一点,但应该这样做。

float originalYPosition = position.Y;
int swoopDirection = 0;
internal void Update(GameTime GameTime)
{
    /* Same update code */

    if (swoopDirection != 0)
    {
        position.Y += swoopDirection;

        if (swoopDirection == 1 && this.BoundingBox.Bottom >= gameBoundingBox.Bottom)
        {
            swoopDirection = -1;
        }
        else if (swoopDirection == -1 && position.Y <= originalYPosition)
        {
            swoopDirection = 0;
        }
    }
}
internal void Swoop()
{
    swoopDirection = 1;
}

基本上,我们有一个变量 swoopDirection,它根据俯冲的状态而变化(下降时为 1,上升时为 -1)。在更新方法中,我们检查 swoopDirection != 0(我们正在俯冲)。如果我们正在俯冲,我们将方向添加到 Y 轴并检查我们没有越界。如果我们触及底部,我们将 swoopDirection 设置为 -1,以便我们上升。如果我们在原来的位置 swoopDirection 设置为 0 并且我们停止俯冲。