我试图从列表中产生敌人。我已经尝试了多种方法。但是我无法让它工作。有没有一种简单的方法可以每 3 秒生成一次敌人?编辑
我试着像这样产生它:问题:只产生一次
protected void AdjustSpawnTimes(GameTime gameTime)
{
// If the spawn maximum time is > 500 milliseconds,
// decrease the spawn time if it's time to do so
// based on spawn-timer variables
if (enemySpawnMaxMilliseconds > 500)
{
timeSinceLastSpawnTimeChange += gameTime.ElapsedGameTime.Milliseconds;
if (timeSinceLastSpawnTimeChange > nextSpawnTimeChange)
{
timeSinceLastSpawnTimeChange -= nextSpawnTimeChange;
if (enemySpawnMaxMilliseconds > 1000)
{
enemySpawnMaxMilliseconds -= 100;
enemySpawnMinMilliseconds -= 100;
}
else
{
enemySpawnMaxMilliseconds -= 10;
enemySpawnMinMilliseconds -= 10;
}
}
}
}
像这样:问题:再次产生一次
private void SpawnEnemy()
{
Vector2 speed = Vector2.Zero;
Vector2 position = Vector2.Zero;
// Default frame size
Point frameSize = new Point(75, 75);
int screenWidth = GraphicsDevice.PresentationParameters.BackBufferWidth;
int screenHeight = GraphicsDevice.PresentationParameters.BackBufferHeight;
// Randomization:
// - Randomly choose which side of the screen to place the enemy
// - Randomly create a position along that side of the screen
// - Randomly choose a speed for the enemy
switch (rand.Next(4))
{
case 0: // Left to right
position = new Vector2(-frameSize.X,
(rand.Next(0, screenHeight - frameSize.Y)));
speed = new Vector2(rand.Next(needleMinV, needleMaxV),
0);
break;
case 1: // Right to left
position = new Vector2(screenWidth,
(rand.Next(0, screenHeight - frameSize.Y)));
speed = -new Vector2(rand.Next(needleMinV, needleMaxV),
0);
break;
case 2: // Bottom to top
position = new Vector2(rand.Next(0, screenWidth - frameSize.X),
screenHeight);
speed = -new Vector2(0,
(rand.Next(needleMinV, needleMaxV)));
break;
case 3: // Top to bottom
position = new Vector2(rand.Next(0, screenWidth - frameSize.X),
-frameSize.Y);
speed = new Vector2(0,
rand.Next(needleMinV, needleMaxV));
break;
}
这个产生但不动我玩过更新和绘制方法,但似乎没有任何效果
List<Enemy> needleList = new List<Enemy>();
Texture2D needle;
float spawnTime = 10;
const float TIMER = 10;
bool spawnN = true;
更新中:
timer = (float)gameTime.TotalGameTime.TotalSeconds;
spawnTime -= (float)gameTime.ElapsedGameTime.TotalSeconds;
if (timer < 0)
{
foreach (Enemy needele in needleList)
{
spawnN = !spawnN;
needele.Update(gameTime);
spawnTime = TIMER;
}
在抽奖中:
if (spawnN)
{
foreach (Enemy needele in needleList)
{
needele.Draw(gameTime, spriteBatch);
}
}