所以我试图用“下雨的绿色代码”来创建一个类似矩阵的程序。在我决定将所有字符串实例放入列表并从中绘制/更新之前,一切都进展顺利。为了实现正确的效果,我需要随机化一些事情。
创建所有字符串并将其存储在for循环中显示的列表中。间隔和速度随机数会改变字符串下降的速度,以及各个字符在精灵表中旋转的速度。
出于某种原因,虽然我只是让一面墙上的文字一下子掉下来,所有的精灵都以同样的速度旋转。这些类及其各自的功能确实有效......所以问题是我的随机数初始化出了什么问题?
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;
}
答案 0 :(得分:6)
您需要在random
循环之外创建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;
}
在短暂的循环中,使用new System.DateTime().Millisecond
播种将创建相同的种子值。因此,相同的随机数。
答案 1 :(得分:2)
你的循环是“快速”,因此new Random(new System.DateTime().Millisecond)
将始终提供相同的结果,因为每个循环快于1毫秒 - 以下应该有效:
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;
}