在GLSurfaceView顶部绘制Android用户界面

8
对于我的游戏,我正在考虑使用RelativeLayout在我的GLSurfaceView上绘制UI元素(用于显示经过的时间的TextView,用于暂停/重新开始游戏的按钮)。
到目前为止,我一直在直接将所有的UI元素自己绘制到surfaceView上,但是考虑到Android UI提供了很多选项,比如更改字体和颜色类型,我决定使用它。
问题:
  • GLSurfaceView上方绘制UI元素是好的做法还是直接在GLSurfaceView上绘制所有UI元素更好?
  • 我将使用runOnUiThread()方法定期更新UI元素(Say TextView)(每16毫秒)...这样做会有什么问题吗?
  • 我的游戏会容易出现Force Closes吗?
  • 这里是我正在使用的测试Java代码来设置RelativeLayout...glViewGLSurfaceView实例。
        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);
    
    2个回答

    3
    这里有几个问题需要回答关于在GLSurfaceView上绘制UI元素的最佳实践。 如果您希望使用Android布局系统提供的灵活性,则可以在GLSurfaceView上方绘制android控件,但是请注意,这些控件绘制速度可能比glSurfaceView慢得多,因此确保UI不需要太多图形处理能力来渲染,并且不会过快更新。另外,自己渲染所有内容也是一种选择,但是您将失去从Android UI系统中获得的所有特性。
    对于每16毫秒使用runOnUiThread()方法定期更新UI元素(如TextView)听起来没问题。
    关于Force Closes,这与其他问题无关。如果您遵循正确的用法并且没有引发异常,那么您应该没问题。如果您引发了异常,则您的应用程序将被强行关闭(除非您正确地处理了异常)。

    3

    我目前正在制作一个Android游戏,所以想与大家分享我的经验。

    在GLSurfaceView上绘制UI元素是好的实践,还是更好地直接将所有UI内容绘制到GLSurfaceView上呢?

    个人认为使用Android提供的内置UI小部件来绘制UI是一个好的实践。有一些情况不适用,例如可拖动到游戏区域周围的UI控件,或具有复杂动画或行为的UI控件。

    如果您需要按钮和文本视图,则建议使用您提出的方法。

    我将使用runOnUiThread()方法定期更新UI元素的内容(例如TextView)(每16毫秒更新一次)。这样做会有问题吗?

    我的游戏是否容易崩溃?

    我使用相同的系统更新我的UI组件。我没有必要每16毫秒更新一次,但我确实没有任何强制关闭或无响应的UI问题。

    如果您有许多(我说的是10-20个以上)组件需要定期更新,则有可能会遇到无响应的UI问题。

    您是否需要每16毫秒更新视图(约60FPS)?如果必要,您可以更新基础值以保持正确的逻辑,但仅在20-30FPS时更新视图以减少在UI线程上运行的数量。

    我认为UI不需要像您的OpenGL视图那样经常更新,因为它们没有以同样的方式飞快移动。如果一个textView每秒更新20次,则仍然会感到其不断变化的感觉。


    是的...有道理...你考虑看看我之前发布的另一个问题吗? http://stackoverflow.com/questions/14522715/passing-instructions-from-ui-thread-to-rendering-thread-glsurfaceview - BLOB

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接