2013-03-08 71 views
-1

我試圖使用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

回答

2

您只需要爲您的紋理調用Random.Next一次。目前,您正在爲每次抽獎操作調用它。

1
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(); 
0

問題是每次繪製函數調用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