有一组小行星,我怎么能将它们循环到无限生成?

时间:2013-05-22 02:25:52

标签: c# xna html-helper

我制作了一个类似于小行星的游戏,我制作了一个由int计数控制的小行星数组,我在游戏开始时将10个小行星产生到屏幕上。

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

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

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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

}