別のアプローチを試す必要があると思います。まず、必要な位置やその他の変数を格納できる小惑星クラスが必要です。
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 の小惑星が作成されるため、以下の更新コードを使用すると、その速度で下に移動します。
さて、あなたの実際の問題については、それらが十分でない場合にさらにスポーンする必要があります(プレーヤーがそれらを破壊したと思います)
したがって、あなたの update メソッドで:
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;
}