我工作的一個小遊戲,我有改變我的活動的內容視圖的問題時,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
完成。
我一直在思考的幾個解決方案,但所有的人帶來其他問題:
- 具有
GLSurfaceView
或Activity
看到,如果遊戲結束通過輪詢在渲染一個標誌,但有在這些類,無環(和在GLSurfaceView
的onDraw
永遠不會被調用) - 使用
queueEvent()
方法,但Renderer
類沒有它(和使用GLSurfaceView.queueEvent()
不起作用,因爲Runnable
遺體的渲染線程) - 只實現某種消息線程來檢查遊戲結束,但這聽起來像是浪費資源。
有你的任何一個經歷過類似的問題?如果交換時的邏輯位於Renderer
上,將Activity
的內容視圖從GLSurfaceView
更改爲其他內容的最佳方法是什麼?
聽起來像你應該使用不同的活動,並使用意圖在它們之間切換。 – stealthcopter 2011-03-06 18:48:06