随机生成敌人 XNA 4.0 (WP7)
本文关键字:WP7 XNA 敌人 随机 | 更新日期: 2023-09-27 18:31:57
我正在为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
更新正常,但仍然存在此问题。
任何帮助将不胜感激。
假设每次更新()都调用UpdateEnemies,那么你在每个Update()上都会改变敌人的SpawnTime,这是没有意义的。你只应该在敌人生成时更改它,即:
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() 中,并使其成为类的成员。
random = new Random();
每次调用更新函数时,您都会创建一个新的 Random 实例。这样做将导致您的随机函数生成相同的值,因为它将基于相同的种子。
在Update 函数之外实例化 Random 对象,可能在构造函数中。 这样做将改进您的代码,并解决您的问题。