私のゲームでは、スポーン時にタイマーをオンにしてスポーンする小惑星があり、一度に 1 つずつスポーンさせたいと考えています。私の問題は、それらがすべて同じ列にスポーンすることです。そのため、速度が上がると左に移動し、すでに画面からほとんど外れている小惑星にスポーンします。
http://www.youtube.com/watch?v=9pKXZyzIpGs&feature=youtu.be
これが私の更新コードです。
namespace PixeBlastGame
{
public class GameUpdate
{
SpriteBatch spriteBatch;
GameTime gameTime;
Vector2 vPlayer = new Vector2(0, 720 / 2);
Vector2 vAsteroid;
Vector2 velocity;
Random rand = new Random();
float spawnTimer;
float spawnRate = 1;
List<Vector2> Asteroids = new List<Vector2>();
public GameUpdate()
{
vAsteroid.Y = rand.Next(100, 680);
vAsteroid.X = 1100;
}
public void Update(GameTime theTime)
{
gameTime = theTime;
vPlayer.Y += velocity.Y;
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
spawnTimer += elapsed;
if (spawnTimer >= spawnRate)
{
Asteroids.Add(new Vector2(1000 ,rand.Next(0, 720)));
spawnTimer = 0;
}
if (Keyboard.GetState().IsKeyDown(Keys.Down))
{
velocity.Y = 5;
}
else if (Keyboard.GetState().IsKeyDown(Keys.Up))
{
velocity.Y = -5;
}
else
{
velocity.Y = 0;
}
if (vPlayer.Y > 630 )//+ Game1.tPlayer.Height)
vPlayer.Y = 630;
if (vPlayer.Y < -10) //+ Game1.tPlayer.Height)
vPlayer.Y = -10;
}
public void Draw(SpriteBatch theBatch)
{
spriteBatch = theBatch;
foreach (Vector2 asteroid in Asteroids) //Draw each astroid
{
DrawAsteroid(asteroid.X, asteroid.Y);
}
spriteBatch.Begin();
spriteBatch.Draw(Game1.tPlayer, vPlayer, Color.White);
spriteBatch.End();
}
public void DrawAsteroid(float x, float y)
{
vAsteroid.X -= 5; vAsteroid.Y = y;
spriteBatch.Begin();
spriteBatch.Draw(Game1.tAsteroid, vAsteroid, Color.White);
spriteBatch.End();
}
}
}
私を助けるためにさらにコードを提供する必要がある場合は、コメントを投稿してください。