对于我的比赛,我想绘制UI元素(TextView的用于暂停/重新启动游戏显示时间流逝,按钮)在我之上GLSurfaceView
使用RelativeLayout的...
直到现在,我自己直接绘制所有的UI元素surfaceView但考虑到从Android的UI宽选项(如改变字体和颜色的字体),我决定使用它。
问题:
- 它是很好的做法,借鉴的顶部UI元素
GLSurfaceView
还是更绘制所有的UI东西自己直接GLSurfaceView
? - 我将更新UI元素(说的内容
TextView
)定期(每16毫秒)通过runOnUiThread()
方法......这是坏? - 请问我的比赛是容易的强制关闭?
下面是我使用来设置RelativeLayout的测试java代码... glView
是GLSurfaceView
实例。
rl = new RelativeLayout(this);
rl.addView(glView);
tv = new TextView(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_TOP);
tv.setLayoutParams(lp);
tv.setText("FPS: 0");
tv.setBackgroundColor(0x4060ff70);
rl.addView(tv);
setContentView(rl);
- 它是很好的做法,借鉴GLSurfaceView的顶部UI元素或者是它更好地吸取所有的UI东西自己直接GLSurfaceView?
这似乎是一个好主意画上GLSurfaceView的热门Android的控制,如果你的愿望是,Android的布局系统提供了灵活性。 警告,虽然这些控件可慢得多绘制比你glSurfaceView,所以一定要确保UI并不需要太多的图形功能来呈现,并且不太快更新。
一切都渲染自己是一个选择,但你失去所有的,你可以从Android UI系统中发现的特征。
- 我将更新UI元素(说的TextView)定期(每16毫秒)通过runOnUiThread()方法的内容......这是坏?
听起来没什么问题。
这不会有什么做的其他问题。 如果你按照正确的使用并不会导致抛出异常,那么你应该罚款。 如果引起异常那么你的应用程序将被强制关闭(除非你妥善处理例外)。
我这样做是目前在Android游戏我在做,所以我想我会分享我的经验它。
它是很好的做法,借鉴GLSurfaceView的顶部UI元素或者是它更好地吸取所有的UI东西自己直接GLSurfaceView?
我个人认为这是使用内置的UI部件是Android为您绘制你的UI很好的做法。 有一些情况下是不适合,可以在你的游戏区域拖动或具有复杂的动画或行为如UI控件。
如果你是按钮和textViews后,那么我建议你建议的方法。
我将更新UI元素(说的TextView)定期(每16毫秒)通过runOnUiThread()方法的内容......这是坏?
请问我的比赛是容易的强制关闭?
我用的是同一个系统来更新我的UI组件。 我没有必要经常更新每隔16毫秒,但我肯定不具有强制关闭或无响应的用户界面的任何问题。
如果你有很多(我说的是10-20 +)组件定期更新这则是可能的,你可能会遇到无响应的用户界面问题。
你需要更新每16毫秒(约60FPS)的看法? 你可以更新基础值,以保持正确的逻辑,但只更新视图中的每个20-30FPS如果需要降低UI线程上运行的量。
我觉得用户界面并不需要被经常更新你的OpenGL视图,你没有的东西以同样的方式wizzing左右。 如果一个TextView每秒刷新20次,你仍然会得到它不断变化的感觉。