2011-03-06 139 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