0

在我的 xna 游戏中,我有一种方法可以在地图上的随机位置创建宝箱。问题是,它把他们都吸引到了同一个地方。random 不会为 v3 点生成唯一的随机数。但是,如果我调试并逐步执行该方法,它会完美运行。

void CreateTreasure()
    {
        for (int i = 0; i < 20; i++)
        {
            Random random = new Random();
            Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
            treasureList.Add(t);
        }
    }

在平局中我循环

foreach (Treasure t in treasureList)
        {
            DrawModel(treasure, Matrix.Identity * Matrix.CreateScale(0.02f) * Matrix.CreateTranslation(t.Position));
            PositionOnMap(ref t.Position);
        }

PositionOnMap 只是获取位置并调整 Y 以使模型位于高度图上。有什么想法吗?

4

2 回答 2

2

在循环外创建随机数,仅在内部使用下一个,还为初始化程序使用随机种子,例如:

var random = new Random(Guid.NewGuid().GetHashCode());
于 2011-02-22T15:46:50.883 回答
2

您需要将 Random 移到循环之外。现在,它每次都会创建一个新的 Random 实例。由于默认种子是基于时间的,如果这种情况发生得很快,对 Next() 的第一次调用将始终返回相同的值。尝试这个:

void CreateTreasure()
{
    // Just move this outside, so each .Next call is on the same instance...
    Random random = new Random();
    for (int i = 0; i < 20; i++)
    {
        Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
        treasureList.Add(t);
    }
}
于 2011-02-22T15:49:50.533 回答