2012-02-27 4 views
0
public void Draw(SpriteBatch theSpriteBatch) 
    { 
     Random rand = new Random(); 
     for(int y = 0; y < map.GetLength(0); y++) { 
      for(int x = 0; x < map.GetLength(1); x++) { 
       theSpriteBatch.Draw(tile[rand.Next(0,3)], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
        Color.White); 
      } 
     } 
    } 

이렇게하면 타일이 깜박이고 끊임없이 다시 그립니다. 한 번 그리기만으로 무작위 효과를 얻으려면 어떻게해야합니까? 이 타일을 마우스로 클릭하여 바꿀 수있는 방법이 있습니까? 또한 한 타일을 다른 타일보다 더 널리 퍼지게하는 방법이 있습니까?C# XNA 랜덤 타일 엔진

답변

3

난 당신은 무작위로 타일 한 번를 생성하고 그 임의의 순서 마다을 끌기 위해 찾고있다 생각합니다. XNA의 Draw은 모든 "프레임"을 실행합니다. 이는 일반적으로 초당 1 회 이상입니다!

현재 루프를 새로운 영역 (지도로드)으로 복사하십시오. 타일 ​​생성 결과를 저장할 2D 데이터 구조 (배열 등)를 추가하십시오. 내 샘플 2D 정수 배열 tileNums 호출 해요. 이제, 그들은 지금과 같이 루프를 유지하는 대신 무승부의 결과를 저장하기 위해 내장을 변경

Random rand = new Random(); 
    for(int y = 0; y < map.GetLength(0); y++) { 
     for(int x = 0; x < map.GetLength(1); x++) { 
      tileNums[x, y] = rand.Next(0,3); 
     } 
    } 

지금은 단지 더 이상이 데이터에서 취할 무작위로 대신 생성하지 않으려면 현재 Draw 루프의 내장을 변경 :

//Random object no longer needed 
    for(int y = 0; y < map.GetLength(0); y++) { 
     for(int x = 0; x < map.GetLength(1); x++) { 
      theSpriteBatch.Draw(tile[tileNums[x, y]], new Rectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight), 
       Color.White); 
     } 
    } 
+0

감사합니다. 무승부가 매 프레임마다 달린 것을 알지 못했지만, 깜박 거리는 것을 보았을 때 그 것이 문제라고 생각했습니다. 난 그냥 무작위로 얻는 방법을 잘 모르지만 지금 받았어. 한 가지 문제는 tileNums 배열을 사용하여 인덱스를 벗어납니다. 이 int [,]와 같은 배열을 생성합니다 tileNums = new int [0,3]; 권리? – Corey

+0

아니요, 각 치수의 크기입니다. 이 구조체는 맵과 정확히 같은 크기 여야합니다. 그래서'new int [map.GetLength (1), map.GetLength (0)];'('x, y'를 했으므로 'y, x'를 할 수 있고 반대로 할 수있다.) –

+0

아! 좋아, 이제는 그것에 대해 생각하는 것이 완벽하게 이해된다 : p. 나를 도와 주셔서 감사합니다. – Corey