(在你看之前,我很担心在这里发帖,因为我之前的问题得到了很多负面回答......请尽量保持友好。我是学生,不能写“完美”代码)
我正在试图弄清楚如何使蚊子(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--;
}
}
我不经常在这里提问,所以如果我使用的格式不正确或者我提供的信息太少,我很抱歉。 如果您还需要了解其他信息,请告知我们。
答案 0 :(得分:0)
有很多方法可以实现这一点,但是应该这样做。
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并且我们停止俯冲。