0

我制作了一个类似于小行星的游戏,并且制作了一个由int计数控制的小行星阵列,当游戏开始时,我在屏幕上生成了 10 颗小行星。

我想知道的是如何让小行星无限产卵。我正在考虑使用循环并尝试过:

if (asteroidcount <= 5)
{
    asteroidcount += 10;
} 

但这似乎不起作用。我也在使用 Visual Studio Express C# 2010

4

2 回答 2

4

我认为你需要尝试不同的方法。首先,您需要一个小行星类,您可以在其中存储您可能需要的位置和其他变量。

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;
}
于 2013-05-22T11:49:32.590 回答
0

如果没有更多代码或有关游戏如何工作的信息,很难回答,但猜测是这样的:如果数量下降到一定数量以下。

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

}
于 2013-05-22T02:28:09.250 回答