【发布时间】:2017-07-31 00:44:11
【问题描述】:
(在您阅读之前,我对在这里发帖感到非常紧张,因为我之前的问题得到了很多负面回应......请尽量保持友善。我是一名学生,不能写“完美”代码)
我目前正在尝试弄清楚如何让蚊子 (Texture2D) 向下俯冲,然后回到原来的位置。 目前蚊子只是在屏幕范围内左右移动,没有 Y 移动。
我已经通过调试器单步执行它并观察它的 Y 坐标。我的蚊子确实在俯冲下来,然后又向上飞……但是,它们的速度如此之快,以至于人眼看不到。
因此,我需要一种方法来平稳地将它们俯冲下来,使其真正可见。 我目前无法将图像嵌入到我的帖子中,但是我制作了一个 GIF 来展示我想要的效果。 Here's a link to my GIF
我尝试过的事情:
- 复制了我的运动代码的第一行(见下文)并对其进行了更改,使其仅影响 Y 坐标。
- 结果:蚊子仍然俯冲得太快,看不见。
- 更改我的蚊子的velocity.Y 以包含一个不为0 的Y,这样我的移动代码也将更改Y 位置,而不仅仅是X 位置。
- 结果:游戏卡在了一个无限循环中,因为我的移动代码在 Update() 函数中,并且代码从未退出循环,因此它可以更新位置......李>
这是我的更新中的移动代码。 蚊子一直向右移动,然后一直向左移动。
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--;
}
}
我不经常在这里提问,所以如果我使用了不正确的格式或者我提供的信息太少,我很抱歉。 如果您还需要了解其他信息,请告诉我。
【问题讨论】:
-
你在哪里打电话
Swoop? -
在我的主游戏代码 (MosquitoAttackGame.cs) 中。我有一个随机数生成器,如果生成特定数字,它会调用 swoop 方法。我还没有尝试你的解决方案,因为我目前在学校。不过我回家后会试试的:)