0

我正在为一个学校项目做一个类似 dxball 的游戏。我正在尝试为将在屏幕上移动的对象(块)创建生成点。但我的问题是当我说创建 2 个 Block 类型的对象时。他们将获得相同的随机重生位置,并且他们将始终保持相同的重生位置。所以我想我对随机函数做错了

public class blocks
{
    public Texture2D texturBlock1;
    public Vector2 hastighet = new Vector2(500.0f, 000.0f);
    public Vector2 position;
    private Random random = new Random();
    private int Screen = new int();




   public blocks(int MaxWith)
   {
       this.position.X = MaxWith+10;
       this.position.Y = random.Next(300);
       Screen = MaxWith;
   }

如果有人可以帮助我,我会很高兴。谈到 XNA 和 c#,我是一个真正的新手

4

2 回答 2

5

.NET 中的 Random 类通常使用 System.DateTime 作为它的种子,因此当您同时创建多个随机数时,您往往会获得相同的种子并生成相同的随机数。

试试这个使用 GUID 作为种子的静态方法

public static int RandNumber(int low, int high)
{
        Random rndNum = new Random(int.Parse(Guid.NewGuid().ToString().Substring(0, 8), System.Globalization.NumberStyles.HexNumber));
        int rnd = rndNum.Next(low, high);
        return rnd;
}
于 2012-12-09T05:43:12.047 回答
3

问题可能是您Random为每个块创建一个新对象。这可能将它们全部初始化(为它们的伪随机器函数提供相同的种子),从而导致它们为您提供相同的随机数。

解决这个问题的最简单方法是简单地制作private Random random static. 那么Random所有块一起只有一个对象,它们应该都得到不同的位置。

希望这可以帮助!

于 2012-12-09T05:40:58.243 回答