2012-01-20 59 views
1

當我開始我的遊戲黑屏時,因爲資源正在加載一段時間。 我完成了一個教程,其中展示瞭如何顯示進度條,同時領先資源我跟着它,現在我可以看到進度條。但問題是,當進度條可見時,其他所有東西都會停止。沒有任何反應。只有一個黑屏和一個進度條就可以了。任何人都可以告訴我爲什麼每件事都暫停,爲什麼loadresources和loadscene方法不起作用?請提供解決方案。在AndEngine中加載紋理時的進度條

回答

0

您需要在工作線程中加載資源。這樣做的好用處是AsyncTask。指南主題Processes and Threads解釋了爲什麼你需要這樣的東西,以及示例代碼顯示如何做一個簡單的AsyncTask,可能正是你需要的。

+1

實際上引擎本身加載資源。我的問題是,爲什麼Engine上有一個對話框或進度條時會暫停。我如何手動恢復它。 –

+0

@Jawad Amjad檢查我的答案吼聲。希望能幫助到你 ;) – GuilhE

0

從Engine.java:

public void onDrawFrame(final GLState pGLState) throws InterruptedException { 
     final EngineLock engineLock = this.mEngineLock; 

     engineLock.lock(); 
     try { 
      engineLock.waitUntilCanDraw(); 

      this.mVertexBufferObjectManager.updateVertexBufferObjects(pGLState); 
      this.mTextureManager.updateTextures(pGLState); 
      this.mFontManager.updateFonts(pGLState); 

      this.onUpdateDrawHandlers(pGLState, this.mCamera); 
      this.onDrawScene(pGLState, this.mCamera); 

      engineLock.notifyCanUpdate(); 
     } finally { 
      engineLock.unlock(); 
     } 
    } 

這就是爲什麼發動機掛起和UI卡住。當紋理被加載到硬件中時,可以顯示加載屏幕,而不會被凍結,比如ProgressBar。這並不容易,需要大量的代碼,但它可能並且不需要瘋狂的黑客攻擊,只是一些邏輯。

你需要有一個資源管理器(RM)場景管理器(SM)誰一起工作(與AsyncTasks),負責加載紋理當前場景。由於您的帳戶號碼爲BaseGameActivity,因此您可以使用此Activity實例來顯示帶有進度欄的全屏Dialog。其中的邏輯是:

  1. SM被要求出示A場景
  2. SM顯示加載Dialog
  3. SM異步告訴RM到所有A場景資源加載到硬件(每個紋理場景A,texture.load)
  4. RM 「onSceneTexturesLoadComplete」 講述SM所有紋理加載

由於texture.load不能保證紋理實際上被加載,所以你需要有一個TryToDismissDialog,它可以擴展TimerTask。這TryToDismissDialog不時會查詢A場景紋理和檢查,如果他們是實際加載:

if (texturePack.getTexture().isLoadedToHardware()) { 
     texturesLoaded++; 
} 

如果所有紋理加載您關閉Dialog,瞧你會看到的場景做好準備。
希望它有幫助


ps:這實際上涉及到一些代碼行,我剛剛在這裏發佈了一個快速步驟/指南/僞代碼。我不會發布最終的解決方案,因爲它很沉重,並且「與項目相關」。