3

小伙伴们快速提问

在我的游戏中,我目前必须在屏幕底部生成并向上移动的项目。一旦它们到达屏幕顶部或与玩家发生碰撞,它们就会消失,并且应该在屏幕底部沿 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;
4

3 回答 3

5

您的两个对象可能不共享一个Random对象。所以两个对象都会生成相同的随机数序列。

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

编辑:

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

public static Random random = new Random();
于 2013-06-06T17:48:50.203 回答
0

尝试播种随机数生成器

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

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

于 2013-06-06T17:55:19.450 回答
-1

如果您真的想要一个好的随机数生成器,我建议您System.Security.Cryptography.RandomNumberGenerator不要只使用Random. 但是,不确定它是否会影响性能。

于 2013-06-07T03:15:24.093 回答