我正在开发一款小游戏,在设置GLSurfaceView时我在修改Activity的内容视图时遇到问题,让我来描述该应用的工作原理:
该应用只有一个Activity,它以静态视图开始:setContentView(R.layout.main);
,当用户使用菜单发送某个输入时,GLSurfaceView
被实例化并通过setContentView(gameSession);
设置(其中) gameSession是扩展GLSurfaceView的类。然后,GLSurfaceView类设置运行实际应用程序逻辑的渲染器。
现在发生的事情是游戏逻辑(在Renderer
内部运行)是负责知道游戏何时结束并且视图应该变回R.layout.main
的人,然后渲染器调用GLSurfaceView上的synchronized
方法,通知活动被更改(再次使用setContentView(R.layout.main);
)。
问题就出现了,只要setContentView(R.layout.main);
被调用,一切都会挂起,GLSurfaceView仍然存在(只是不再进行更新)。我担心我遇到了僵局,Activity
等待Renderer
在删除之前完成。
我一直在考虑一些解决方案,但所有这些解决方案带来了其他问题:
GLSurfaceView
或Activity
通过轮询渲染器上的标志来查看游戏是否结束,但这些类上没有循环,(以及onDraw
上的永远不会调用GLSurfaceView
)queueEvent()
方法,但Renderer
类没有它(并使用GLSurfaceView.queueEvent()
不起作用,因为Runnable
仍然是呈现器线程) 你们中是否有人遇到过类似的问题?如果交换时间的逻辑在Activity
上,那么将GLSurfaceView
的内容视图从Renderer
更改为其他内容的最佳方法是什么?