2011-12-28 18 views
0

AndroidGameViewクラスを使用しているときに、一時停止/再開されるアクティビティを適切に処理する最良の方法は何ですか?AndroidGameViewを使用してXamarainでアクティビティレジュームイベントを処理する方法

アクティビティが一時停止するたびに、すべてのOpenGLテクスチャがクリアされ、ビューによってリロードされる必要があります。 GLSurfaceViewlink)クラスには、これらのイベントを適切に処理するための適切な機構があるようです。 (onResumeをオーバーライドすることによって)

これはAndroidGameViewlink)クラスでどのように動作するはずですか? (Androidのゲームビューではこれをサポートしていませんか?)クラスには適切なフック(具体的にはResume)があるようです。ただし、Resumeと表示されている場合はGraphicsContextはまだ設定されていません。 MakeCurrent()を呼び出しResume中に

は例外をスロー:

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

私はMakeCurrent()CreateFrameBufferに電話を入れた場合は、同様のエラーを取得:

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

ときあなたはどんなゲームを再ロード/ロードする必要がありますAndroidGameViewを使用している場合、アクティビティのOnResumeコールバックに対する応答に固有のテクスチャ?

答えて

0

This question/answerは、リンクが有効な回答としてマークされているか分からないのですアンドロイド上のOpenGL-ESに問題があることを説明しています。このソリューションは、Xamarin Mono4Android(Monodroid)APIを使用しないjavaで「純粋な」Androidで開発する場合に有効です。

私はこの質問に答えました。

これを処理する最善の方法は、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 
} 
+0

にそれらのオーバーライドメソッドを使用する必要があります!リンクは、 "純粋な" Android(java)で開発する人を支援する記事へのリンクです。 Chrisが頼んだのはMono4Android(Xamarin)でこれを処理する方法です – John

0

アクティビティには、このような処理方法があります。 OnStart、OnRestart、OnStopなどがあります。あなたはそれらを無効にしてそこにあなたのものをすることができるはずです。一時停止/非常によく

1

を再開するとき

関連する問題