我正在为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();
}
我在这里有一个问题,因为产生的敌人不是随机的。它们以相同的间隔产生特定的运行。
我每次都使用断点和spawnSeconds
和enemySpawnTime
更新,但仍然是这个问题。
非常感谢任何帮助。
答案 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()中,并使其成为类的成员。