繁体   English   中英

奇数抽奖行为

[英]Odd draw behavior

在我的xna游戏中,我有一种方法可以在地图上的随机位置创建宝藏。 问题是,它们将它们全部吸引到了同一位置。 随机变量不会为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以使模型位于高度图上。 有什么想法吗?

在循环外部创建随机变量,仅在内部使用next,还对初始化程序使用随机种子,例如:

var random = new Random(Guid.NewGuid().GetHashCode());

您需要将“随机”移出循环。 现在,它将每次创建一个新的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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM