2013-10-03 34 views
4

我在monogame中爲Windows 8製作了一款遊戲,但遇到了問題。我們終於得到了Surface 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