C# 多个对象的随机数生成
所以我尝试创建一个类似矩阵的程序,带有“绿色代码”。一切都进行得很顺利,直到我决定将所有字符串实例放入一个列表并从中绘制/更新。为了达到正确的效果,我需要随机做一些事情 所有字符串都被创建并存储在您在for循环中看到的列表中。interval和dropspeed随机数更改字符串的下落速度,以及单个字符在精灵工作表中的旋转速度 出于某种原因,虽然我只是得到了一堵文字墙,它一次落下,所有的精灵都以相同的速度旋转。这些类和它们各自的函数都可以工作……所以问题是我的随机数初始化有什么错C# 多个对象的随机数生成,c#,random,xna,C#,Random,Xna,所以我尝试创建一个类似矩阵的程序,带有“绿色代码”。一切都进行得很顺利,直到我决定将所有字符串实例放入一个列表并从中绘制/更新。为了达到正确的效果,我需要随机做一些事情 所有字符串都被创建并存储在您在for循环中看到的列表中。interval和dropspeed随机数更改字符串的下落速度,以及单个字符在精灵工作表中的旋转速度 出于某种原因,虽然我只是得到了一堵文字墙,它一次落下,所有的精灵都以相同的速度旋转。这些类和它们各自的函数都可以工作……所以问题是我的随机数初始化有什么错 for (int
for (int i = 0; i < (wWidth / 30); i++)
{
Random random = new Random(new System.DateTime().Millisecond);
float randInterval = NextFloat(random);
int dropSpeed = random.Next(1, 7);
_msList.Add(new MatrixString(chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
xOff = i * 32;
}
for(int i=0;i<(wWidth/30);i++)
{
Random Random=新随机(新System.DateTime().毫秒);
浮动随机间隔=下一个浮动(随机);
int dropSpeed=random.Next(1,7);
_添加(新的MatrixString(中文,随机区间,dropSpeed,dropSpeed,1.0f,xOff,10));
xOff=i*32;
}
您的循环是“太快”,因此新的Random(new System.DateTime().millis秒)
将始终提供相同的结果,因为每个循环的速度都快于1ms-以下操作应有效:
Random random = new Random(new System.DateTime().Millisecond);
for (int i = 0; i < (wWidth / 30); i++)
{
float randInterval = NextFloat(random);
int dropSpeed = random.Next(1, 7);
_msList.Add(new MatrixString(chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
xOff = i * 32;
}
Random Random=new Random(new System.DateTime().毫秒);
对于(int i=0;i<(wWidth/30);i++)
{
浮动随机间隔=下一个浮动(随机);
int dropSpeed=random.Next(1,7);
_添加(新的MatrixString(中文,随机区间,dropSpeed,dropSpeed,1.0f,xOff,10));
xOff=i*32;
}
您需要在for
循环之外创建随机实例:
Random random = new Random(new System.DateTime().Millisecond);
for (int i = 0; i < (wWidth / 30); i++)
{
float randInterval = NextFloat(random);
int dropSpeed = random.Next(1, 7);
_msList.Add(new MatrixString(
chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
xOff = i * 32;
}
Random Random=new Random(new System.DateTime().毫秒);
对于(int i=0;i<(wWidth/30);i++)
{
浮动随机间隔=下一个浮动(随机);
int dropSpeed=random.Next(1,7);
_添加(新矩阵字符串(
中文,随机区间,dropSpeed,dropSpeed,1.0f,xOff,10);
xOff=i*32;
}
在短时间运行的循环中,使用new System.DateTime().millished
进行种子设定将创建相同的种子值。因此,相同的随机数。您需要在for
循环之外创建您的随机实例。还可以注意到random
的无参数构造函数使用系统时间作为种子,因此可能不需要创建新的DateTime
传入(只需执行new random()
).别担心,这是一个相当常见的错误,在我的上一个游戏项目中,几乎设计团队的每个编剧在每次需要随机数时都会重新植入随机数生成器。更糟糕的是,他们使用的Time()方法被破坏了,所以种子总是一样的。这是一个MMO,他们没有注意到它被破坏了,因为服务器运行了几天,所以当有人登录它时,它已经运行了足够长的时间,以至于它是不可见的,除了在每次重新播种的情况下。不管怎样,我现在正在闲逛。