2013-10-03 1 views
4

monogame에서 Windows 8 용 게임을 만들었지 만 문제가 발생했습니다. 우리는 마침내 표면 RT에 손을 댔지 만이 기기에서 로딩 시간이 실제로 길다는 것을 알았습니다. 우리는 몇 가지 다른 게임을 살펴본 결과, 드문 것이 아니라는 사실을 알아 냈습니다. 리소스를로드하는 동안 사용자의 지루함과 싸우기 위해 로딩 바 및 임의의 사실을 화면에 그려야합니다. 문제는 리소스를로드하면 게임의 나머지 부분을 차단하고 초기화 부분에 달라 붙어서 아무 것도 그릴 수 없다는 것입니다.Backgroundthread Monogame 만들기

내가 잃어버린 스레드를 만들려고했지만 Windows 스토어에서 그렇게 지원하지 않는다는 것을 알았습니다. 이제 내 질문을 백그라운드로로드하거나 전체 게임을 차단하지 않고 전화를 걸 수있는 다른 방법으로 어떻게로드 할 수 있습니까? 내 Draw() 함수를 사용하여 로딩 바를 화면에 그립니다.

답변

4

나는 이런 걸했다 :

protected volatile bool ContentLoaded = false; 

protected async override void LoadContent() 
{ 
    base.LoadContent(); 

    Enabled = false; 
    await ThreadPool.RunAsync(new WorkItemHandler(LoadAllContent)); 
} 

protected void LoadAllContent(Windows.Foundation.IAsyncAction action) 
{ 
    if (action.Status == Windows.Foundation.AsyncStatus.Error) 
     System.Diagnostics.Debug.WriteLine(action.ErrorCode); 

    // load your contents 

    ContentLoaded = true; 
    Enable = true; 
} 

을 그리고 당신의 Draw 방법의 시작 부분에 :

if (!ContentLoaded) 
{ 
    // draw your loading screen 

    return; 
} 

당신은 당신이했습니다 모든 자원을 증가 카운터를 필요 진행률 표시 줄을 원하는 경우 로드 된 후 Draw에 술집이 그 카운터와 관련이 있습니다.

+0

내 상태 관리 때문에 정확한 답을 얻지 못했지만 다른 기능에서 말한 모든 것을 사용할 수 있었고 코드로 작동하여 이제는 내 UI/그리기 실을 차단하지 않고도 멋지게 작동합니다. D 감사합니다. 많이! – MrME

+0

몇 달 전에 똑같은 문제가 있었으므로 다른 사람에게 유용 할 수 있다면 기쁩니다. :) – pinckerman