c# - 不在 C# 中处理的随机对象

标签 c# xna

我正在使用 C# 开发平滑地形生成算法并使用 XNA 显示数据。

我这样做是为了在每次迭代的每个点之间的中间创建一个新点,在两者之间的随机高度。这工作正常,我已将其设置为在第二次迭代时选择一个随机点,就像在第二张幻灯片中那样,而不是尝试在同一轴上的点之间创建一个新点。

发生的事情是循环使用了上一次迭代中的相同随机值: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);

垃圾回收是问题的一部分吗?

关于解决这个问题有什么建议或解决方案吗??

最佳答案

可能您正在循环中创建一个新的 Random 对象。

for (/* ... */) {
    int x = new Random().Next(); // Don't do this!
    // ...
}

尝试在程序启动时只创建一个 Random 实例,然后重新使用它。如果您有多个线程,那么您可以为每个线程使用一个随机对象。

关于c# - 不在 C# 中处理的随机对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942048/

相关文章:

c# - C#中 "using"有什么用?

c# - 使用 .NET SDK 发布到 Amazon Web Services Kinesis 时出错

windows - 适用于 Windows Phone 的 XNA 游戏开发

c# - 在 XNA 中绘制二维曲线

c# - 如何在存在打开的连接时恢复 SQLite 数据库?

c# - 将 float 更改为 double

c# - 引用自定义 C# 扩展方法的编译器错误

c# - XNA 绘制并创建对象数组

c# - 我怎么知道我的线程何时结束?