随机产生敌人XNA 4.0(WP7)

时间:2012-04-23 14:54:28

标签: c# windows-phone-7 random xna

我正在为C#和XNA中的Windows手机创建一个2D侧滚动(有点)游戏。

我有一个角色动画,使它看起来像精灵正在移动,但背景和敌人是唯一移动的东西。 我为敌人加载了纹理,屏幕上的位置是静态的,所以很好。 但我的问题是,我想以随机的间隔产生这些敌人。 我已经设置了一个随机数生成器,一个int和几个TimeSpan变量。

这是我在UpdateEnemies方法中放置的代码。

注意:在更新中,我正在调用UpdateEnemies(gameTime);

random = new Random();
spawnSeconds = random.Next(1, 6);
enemySpawnTime = TimeSpan.FromSeconds(spawnSeconds); 
if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime)
{
    previousSpawnTime = gameTime.TotalGameTime;
    // Add an Enemy
    AddEnemy();
}

我在这里有一个问题,因为产生的敌人不是随机的。它们以相同的间隔产生特定的运行。

我每次都使用断点和spawnSecondsenemySpawnTime更新,但仍然是这个问题。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

random = new Random();

每次调用更新功能时,都会创建一个新的Random实例。 这样做会导致随机函数生成相同的值,因为它将基于相同的种子。

在Update函数之外实例化Random对象,可能在构造函数中。这样做可以改善您的代码,并解决您的问题。

答案 1 :(得分:2)

假设每次Update()都调用UpdateEnemies,你就会在每个Update()上更改enemySpawnTime,这没有意义。你应该只在敌人产生时改变它,即:

if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime)
{
    // Add an Enemy
    AddEnemy();

    // Update the time left next enemy spawn
    previousSpawnTime = gameTime.TotalGameTime;
    var spawnSeconds = random.Next(1, 6); // random should be a member of the class
    enemySpawnTime = TimeSpan.FromSeconds(spawnSeconds); 
}

如前所述,只创建一次Random()对象,例如在Initialize()中,并使其成为类的成员。