我制作了一个类似于小行星的游戏,并且制作了一个由int
计数控制的小行星阵列,当游戏开始时,我在屏幕上生成了 10 颗小行星。
我想知道的是如何让小行星无限产卵。我正在考虑使用循环并尝试过:
if (asteroidcount <= 5)
{
asteroidcount += 10;
}
但这似乎不起作用。我也在使用 Visual Studio Express C# 2010
我制作了一个类似于小行星的游戏,并且制作了一个由int
计数控制的小行星阵列,当游戏开始时,我在屏幕上生成了 10 颗小行星。
我想知道的是如何让小行星无限产卵。我正在考虑使用循环并尝试过:
if (asteroidcount <= 5)
{
asteroidcount += 10;
}
但这似乎不起作用。我也在使用 Visual Studio Express C# 2010
我认为你需要尝试不同的方法。首先,您需要一个小行星类,您可以在其中存储您可能需要的位置和其他变量。
public class Asteroid
{
public Vector2 Velocity;
public Vector2 Position;
public Asteroid(Vector2 velocity, vector2 position)
{
Velocity = velocity;
Position = position;
}
}
现在将它添加List
到您的游戏中,它将存储所有小行星。我之所以选择它而不是数组,是因为根据您拥有的小行星数量来更改大小要容易得多。
List<Asteroid> Asteroids = new List<Asteroid>();
现在你可以在游戏开始时生成 10 颗这样的小行星
for (int i = 0; i<10;i++)
{
Asteroids.Add(new Asteroid(new Vector2(0,10), new Vector2(50,50)));
}
这将使小行星在位置 50,50 处以 10 的速度移动,因此如果您使用下面的更新代码,它将以该速度向下移动。
现在,对于您的实际问题,当它们还不够时,我们需要生成更多(我假设玩家摧毁了它们)
因此,在您的更新方法中:
while (Asteroids.Count <5) //If there are less than 5 asteroids, add more
{
Asteroids.Add(new Asteroid(new Vector2(0,10), new Vector2(50,50)));
//Same thing as before, add asteroid
}
你去吧!
这里有一些额外的提示
如果你想画出所有的小行星,你需要为它制定一个方法
public void DrawAsteroid(Asteroid a)
{
spriteBatch.Draw(ASTEROID TEXTURE, a.Position, Color.White);
spriteBatch.End();
}
现在在你的Draw()
方法中你可以添加这个
spriteBatch.Begin();
foreach (Asteroid a in Asteroids) //Draw each astroid
{
DrawAsteroid(a);
}
spriteBatch.End();
如果你想更新所有的小行星,你可以使用类似的方法。在Update()
,
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
foreach (Asteroid a in Asteroids) //Update each astroid
{
UpdateAsteroid(a, elapsed);
}
以及方法,
public void UpdateAsteroid(Asteroid a, float elapsed)
{
a.Position += a.Velocity * elapsed;
}
如果没有更多代码或有关游戏如何工作的信息,很难回答,但猜测是这样的:如果数量下降到一定数量以下。
bool running = true;
while (running)
{
// Handle input etc
// Handle game logic
// Spawn more asteroids if there are too few of them!
if (asteroidcount <= 5)
{
asteroidcount += 10;
}
// Render
}