2013-03-08 2 views
-1

텍스처를 그리는 데 C#에서 Random 클래스를 사용하여 난수를 생성하려고합니다. 화면의 임의의 좌표에 텍스처를 그리려는 중이지만 아래 코드를 실행하려고하면 텍스처가 무작위로 움직입니다. 그것을 그려 그 자리에 머물러있게해야합니다.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

답변

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를 한 번만 초기화해야합니다. 하지만 그건 좋은 선택이 아닙니다. –

+2

난수 생성기의 상수 시드? * 테이프로 주석을 달고 위로 스크롤하고 내부에서 소리내어 울음 소리 * – annonymously

관련 문제