我工作的一个小游戏,我有改变我的活动的内容视图的问题时,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