C#/ XNA - 私有Random类变量在所有实例中返回相同的值

时间:2012-12-09 05:35:13

标签: c# random xna

我为学校项目做了类似游戏的dxball。我正在尝试为将在屏幕上移动的对象(块)创建spawn points。但我的问题是当我说创建2个Block类型的对象时。他们将获得相同的随机spawnlocation,他们将始终保持相同的respawn位置。所以我想我正在做的随机功能错误

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#

,我是一个真正的新手

2 个答案:

答案 0 :(得分:5)

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

尝试使用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;
}

答案 1 :(得分:3)

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

解决此问题的最简单方法就是制作private Random random static。然后,所有块将只有一个Random对象,它们应该都有不同的位置。

希望这有帮助!