2011-03-06 223 views
2

我工作的一個小遊戲,我有改變我的活動的內容視圖的問題時,GLSurfaceView設置,讓我描述應用程序的工作原理:如何更改GLSurfaceView的內容視圖?

的應用程序只有一個活動,它與一個開始靜態視圖:setContentView(R.layout.main);,當用戶使用菜單發送某個輸入時,GLSurfaceView被實例化並通過setContentView(gameSession);(其中gameSession是擴展GLSurfaceView的類)進行設置。 GLSurfaceView類然後設置運行真實應用程序邏輯的Renderer。

現在會發生什麼情況是,遊戲邏輯(Renderer裏面跑)是一個負責瞭解當遊戲結束,並認爲應改回R.layout.main,渲染器則呼籲GLSurfaceView,一個​​方法,通知要更改的活動(再次使用setContentView(R.layout.main);)。

問題來了,只要setContentView(R.layout.main);被稱爲一切都掛起,GLSurfaceView仍然存在(只是沒有得到更新)。我擔心我遇到了一個僵局,Activity在刪除它之前等待Renderer完成。

我一直在思考的幾個解決方案,但所有的人帶來其他問題:

  1. 具有GLSurfaceViewActivity看到,如果遊戲結束通過輪詢在渲染一個標誌,但有在這些類,無環(和在GLSurfaceViewonDraw永遠不會被調用)
  2. 使用queueEvent()方法,但Renderer類沒有它(和使用GLSurfaceView.queueEvent()不起作用,因爲Runnable遺體的渲染線程)
  3. 只實現某種消息線程來檢查遊戲結束,但這聽起來像是浪費資源。

有你的任何一個經歷過類似的問題?如果交換時的邏輯位於Renderer上,將Activity的內容視圖從GLSurfaceView更改爲其他內容的最佳方法是什麼?

+0

聽起來像你應該使用不同的活動,並使用意圖在它們之間切換。 – stealthcopter 2011-03-06 18:48:06

回答

2

您不應該打電話給setContentView()multiple times

您可以使用多個活動,在您完成遊戲活動並返回靜態視圖活動時調用finish()

+0

謝謝,調用finish()只是停止一切,我不必關心多線程,它在轉換時也看起來更平滑;) – capitano666 2011-03-06 21:07:32

+0

cool!考慮使用綠色複選標記標記接受答案。它對你和回答者都有好處,並鼓勵人們在未來回答你的問題。 – 2011-03-06 21:51:06