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 の小惑星が作成されるため、以下の更新コードを使用すると、その速度で下に移動します。

さて、あなたの実際の問題については、それらが十分でない場合にさらにスポーンする必要があります(プレーヤーがそれらを破壊したと思います)

したがって、あなたの 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;
}
于 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 に答える