2013-02-19 4 views
3

2D 게임 :
재생하는 동안 큰 texture2D (2000x2500 픽셀)를로드하고 다른 일부를 언로드해야합니다.
물론 게임을하지 않고 texture2D를로드 및 언로드하려면 Free/Freeze (또는 덜 ...) : x 가능한지 모르겠습니다.재생하는 동안 텍스처로드

는 이미

//thread Loading 
ThreadStart th_loadingScreen = delegate { DisplayLoading(LoadingScreen); }; 
new Thread(th_loadingScreen).Start(); 

은 "로딩 화면"을 그리는 동안 몇 가지 질감을로드 할 스레드를 사용하지만 꽤 다른 것 같아요. 물론

, 내가 뭔가를 시도 :

private void LoadUnload() 
{ 
    for (int j = 0; j <= NbrRow; j++) 
     for (int i = 0; i <= NbrCol; i++) 
     { 
      if(somethingTrue) 
      { 
       ThreadStart th_LoadInGame = delegate 
        { 
         LoadInGame(i, j, TextureStringPathToLoad); 
        }; 
       new Thread(th_LoadInGame).Start(); 
      } 
     } 
} 

을하지만 약간의 동결이있다.

그리고, 나는 내용을 언로드하는 방법을 알고,하지만 난 하나의로드 질감을 언로드하는 방법을 모른다 : X

답변

2

ContentManager 객체 내에서 개별 요소를 언로드 할 방법은 없습니다. 그래서, 내가하는 일은 여러개의 ContentManager을 만들고 그들 사이에 필요한 것을 나누는 것입니다. 그렇게하면 나는 예를 들어 Unload 하나를 유지하고 다른 사람들은 여전히 ​​메모리에있게 할 수 있습니다.

보시다시피, 스레딩 자체만으로 딸꾹질 등이 없음을 보장하지 않습니다. 나는 ThreadPriority 속성으로 주위를 어지럽 혀질 것이다. 아마도 그것을 낮추고 무슨 일이 일어나는지를보십시오. 그러나 이것도 보증은 아닙니다. 문서에서 :

운영 체제는 스레드의 우선 순위를 따르지 않아도됩니다.

+0

내 스레드 문제에 답했고 언로드 작업에 대한 다른 주제를 작성 했으므로 포인트를 제공합니다 (이에 대해 더 궁금한 점이 있습니다. 누군가 대답하면 점을 획득해야하는지 모르겠습니다.)). 스레드의 우선 순위와 텍스처의 크기를 줄이면 작업이 완료됩니다. Thx 도움! – Sharpnel

+0

[Unload() a Texture2D]에 대한 답변입니다 (http://stackoverflow.com/a/14970682/1456533). – Sharpnel