C#Random()不能随机工作

时间:2013-06-06 17:46:45

标签: c# random xna

快速问题人

在我的游戏中,我目前需要在屏幕底部产生并向上移动的物品。一旦它们到达屏幕顶部或与它们消失的玩家发生碰撞,并且应该沿着屏幕底部的X轴随机产生。第一个项似乎总是在随机点产生,但是,第二个对象似乎总是在与第一个产生相同的点上产生,尽管使用单独的方法调用产生。有任何想法吗?这是我正在使用的代码:

       public void ReSpawn()

        this.RandX = this.random.Next(30, 650);
        this.Position.X = RandX;
        this.Position.Y = 710;

        if (Object1.Position.Y <= -25) //If item reaches top of screen

                Object1.ReSpawn(); 

        if (Object1.rectangle.Intersects(Player.rectangle)) //Collision with player


                Object1.ReSpawn(); 

        if (Object2.Position.Y <= -25) //If item reaches top of screen

                Object2.ReSpawn();

        if (Object2.rectangle.Intersects(Player.rectangle)) //Collision with player


                Object1.ReSpawn(); 

宣布使用:

    public Random random = new Random();
    public int RandX;

3 个答案:

答案 0 :(得分:5)

您的两个对象可能没有共享Random个对象。因此,两个对象将生成相同的随机数序列。

在两个对象之间共享一个Random对象,它们应该生成不同的值。

修改

使random静态,以便所有对象都使用它。

public static Random random = new Random();

答案 1 :(得分:0)

尝试播种随机数生成器

    Random rand1 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);

http://msdn.microsoft.com/en-us/library/ctssatww.aspx

答案 2 :(得分:-1)

如果你真的想要一个好的随机数生成器,我推荐System.Security.Cryptography.RandomNumberGenerator而不是Random。但是,不确定它是否会影响性能。