2011-12-28 96 views
0

正確處理使用AndroidGameView類時暫停/恢復活動的最佳方式是什麼?如何使用AndroidGameView處理Xamarain中的活動恢復事件

每當一個活動暫停時,所有OpenGL紋理都會被清除,要求它們被視圖重新加載。看來GLSurfaceViewlink)類具有適當的機制來正確處理這些事件。 (通過覆蓋onResume。)

這應該如何與AndroidGameView()類一起工作? (Android遊戲視圖是否不支持這個功能?)該課程似乎有適當的掛鉤(特別是Resume)。但是,當調用Resume時,GraphicsContext尚未設置。

Resume調用MakeCurrent()拋出異常:

System.InvalidOperationException: Operation requires a GraphicsContext, which hasn't been created yet. 

如果我把到CreateFrameBuffer通話MakeCurrent()之前,你會得到一個類似的錯誤:

Java.Lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface 

當您應該加載/裝任何遊戲針對使用AndroidGameView時活動的OnResume回調的特定紋理?

回答

0

This question/answer暫停/恢復得非常好

+0

這不是一個有效的答案!指向一篇文章的鏈接,該文章有助於開發「純粹」Android(java)的人。克里斯問什麼是如何處理Mono4Android(Xamarin)我想...... – John 2012-02-22 12:26:33

0

活動有一些不錯的方法來處理這種事情。 OnStart,OnRestart,OnStop等。你應該能夠覆蓋他們,並在那裏做你的東西。

1

不知道該鏈接被標記爲有效答案時,解釋了在Android上的OpenGL-ES的問題。在Java中使用「純粹」Android開發而不使用Xamarin Mono4Android(Monodroid)API時,該解決方案是有效的。

我發現這個問題的靈魂。

處理此問題的最佳方式是在創建/銷燬OpenGL上下文(和相關表面)時恢復其紋理。

在Mono4Android你應該使用這些替代方法到AndroidGameView

override void CreateFrameBuffer() 
{ 
    if(checkIfResourceWhereLost) 
    { 
     checkIfResourceWhereLost = false; 
     // Code to RESTORE your textures 
    } 
} 

override void DestroyFrameBuffer() 
{ 
    checkIfResourceWhereLost = true; 
    // Code to RELEASE all textures 
}