2011-12-28 27 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 
}