我正在使用C#中的平滑地形生成算法并使用XNA来显示数据.
我正在制作它,因此它在每次迭代的每个点之间创建一个新点,在两者之间的随机高度.这工作正常,我设置它,以便在第二次迭代时它选择一个像幻灯片2中的随机点,而不是尝试在同一轴上的点之间创建一个新点.
发生的事情是循环使用上一次迭代中的相同随机值:http://i.stack.imgur.com/UmWr7.png
这显然不是理想的,因为它不是一个适当的随机生成.
如果我Thread.Sleep(20)在每个点生成后使用它,它可以正常工作:http://i.stack.imgur.com/KziOg.png
我不想在可能的情况下使用Sleep变通方法,因为它非常慢,我想实时使用它.我很确定这与C#垃圾收集器有关.
这是我的获取点代码
Random r = new Random();
int x = (p1.X + p2.X) / 2;
int y;
if (!initial)
y = r.Next(Math.Min(p1.Y, p2.Y), Math.Max(p1.Y, p2.Y));
else
y = r.Next(Math.Min(p1.Y, p2.Y) - Game1.screenHeight / 2, Math.Max(p1.Y, p2.Y) + Game1.screenHeight / 2);
return new Point(x, y);
Run Code Online (Sandbox Code Playgroud)
垃圾收集是问题的一部分吗?
解决这个问题的任何建议或解决方案
Mar*_*ers 10
可能你是在循环中创建一个新的Random对象.
for (/* ... */) {
int x = new Random().Next(); // Don't do this!
// ...
}
Run Code Online (Sandbox Code Playgroud)
尝试在程序启动时只创建一个Random实例,然后重新使用它.如果你有多个线程,那么你可以为每个线程使用一个随机对象.
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |