我如何使用随机类在C#中生成一个随机数(XNA)

问题描述:

我试图使用Random类在C#中绘制纹理生成随机数。我试图在屏幕上绘制一个纹理到随机坐标,但是当我尝试运行下面的代码时,纹理会在随机空间中移动。我需要画出它并保持原位。我如何使用随机类在C#中生成一个随机数(XNA)

Random _Random = new Random(); 
private int MaxX; 
private int MaxY; //screen height and width 

public Texture2D hat; 

//code to load in image 

//draw code 
spriteBatch.Begin(); 
int hatx = _Random.Next(1, MaxX); 
int haty = _Random.Next(1, MaxY); 

spriteBatch.Draw(hat, new Rectangle(hatx, haty, 80, 80), Color.White); 
spriteBatch.End(); 
+0

你应该渲染代码开始 – nsconnector 2013-03-08 10:28:33

您只需要为您的纹理调用Random.Next一次。目前,您正在为每次抽奖操作调用它。

Random _Random = new Random(); 
private int MaxX; 
private int MaxY; //screen height and width 

public Texture2D hat; 

//code to load in image 

// make sure x and y are initialized only once before rendering loop 
int x = _Random.Next(1, MaxX); 
int y = _Random.Next(1, MaxY); 

//draw code 
spriteBatch.Begin(); 
int hatx = x; 
int haty = y; 

spriteBatch.Draw(hat, new Rectangle(hatx, haty, 80, 80), Color.White); 
spriteBatch.End(); 

问题是每次绘制函数调用x和y的数字都改变了。因为每次随机数都会生成一个新号码。所以你的纹理会移动到不同的地方。你需要做的是让两个类成员X和Y,并在ContentLoad函数中生成随机数并填充X和Y值。而在绘制函数使用类成员X和Y,而不是制造新的X和Y

+0

之前初始化hatx,haty只有一次,也可以使用恒定的种子。但这不是一个好的选择。 – 2013-03-08 10:33:13

+2

随机数发生器的恒定种子? *用磁带覆盖评论,滚动,并在里面默默哭泣* – annonymously 2013-03-10 06:50:28