1

我正在用 C# 和 XNA 为 windows phone 创建一个 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();
}

我在这里遇到了一个问题,因为生成的敌人不是随机的。对于该特定运行,它们以相同的间隔生成。

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

任何帮助将不胜感激。

4

2 回答 2

2

随机=新随机();

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

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

于 2012-04-23T14:58:39.073 回答
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() 中,并使其成为类的成员。

于 2012-04-23T16:48:53.557 回答