我有一些代码使用随机数来确定对象是否特殊。我在每个经常重置的4个对象中使用此代码。
Random rand = new Random();
int i = rand.Next(1, 25);
if (i == 1)
{
thiss.typer = "boulder";
thiss.texture = Content.Load<Texture2D>("rock");
}
else if (i == 2)
{
thiss.typer = "ice";
thiss.texture = Content.Load<Texture2D>("ice");
}
else if (i == 3)
{
thiss.typer = "bomb";
thiss.texture = Content.Load<Texture2D>("bomb");
}
else
thiss.typer = "normal";
但每次执行此代码时,当它创建4个对象时,当它使其中一个特殊时,它会因为某些原因使它们全部特殊。这段代码有什么问题,或者我是否需要展示更多的代码来阐明它?
答案 0 :(得分:14)
我可以想到为什么会发生这种情况的两个原因。
首先,也许您不小心在对象之间共享引用,以便thiss.typer
在所有4种情况下引用相同的对象。
其次,更有可能的是,您创建的Random对象共享相同的种子,因此rand.Next在所有4个实例中返回相同的数字。
当您在没有参数的情况下执行new Random()
时,种子将基于当前系统时间。如果你连续多次这样做,种子可能是相同的。
您可以尝试使用相同的Random对象,而不是每次使用它时都创建一个新对象。这样您也可以避免不必要地创建大量对象。