繁体   English   中英

在GLSurfaceView上绘制Android UI

[英]Drawing Android UI on top of GLSurfaceView

对于我的游戏,我正在考虑使用RelativeLayout在我的GLSurfaceView上绘制UI元素(用于显示已用时间的TextView,用于暂停/重新开始游戏的按钮)...

直到现在,我自己直接将所有UI元素绘制到surfaceView,但考虑到Android UI提供的广泛选项(如更改字体和颜色的字体),我决定使用它。

问题:

  • GLSurfaceView上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView
  • 我将使用runOnUiThread()方法定期更新UI元素的内容(Say TextView )(每16毫秒)...这样做不好吗?
  • 我的游戏是否会受到Force Closes的影响?

这是我用来设置RelativeLayout的测试java代码... 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);
  • 在GLSurfaceView上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView?

如果你想要android布局系统提供的灵活性,在GLSurfaceView上绘制android控件似乎是一个好主意。 虽然警告这些控件的绘制速度可能比glSurfaceView慢得多,但请确保UI不需要太多的图形功能来渲染,也不会太快更新。

自己渲染一切是一个选项,但是你失去了从Android UI系统中获得的所有功能。

  • 我将使用runOnUiThread()方法定期更新UI元素的内容(Say TextView)(每16毫秒)...这样做不好吗?

听起来不错。

  • 我的游戏是否会受到Force Closes的影响?

这与其他问题没有任何关系。 如果你遵循正确的用法并且不引起异常被抛出,那么你应该没事。 如果您确实导致异常,那么您的应用将被强制关闭(除非您正确处理异常)。

我目前在我正在制作的Android游戏中这样做,所以我想我会分享我的经验。

在GLSurfaceView上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView?

就个人而言,我认为使用Android为您绘制UI的内置UI小部件是一种很好的做法。 在某些情况下它不适合,例如可以在游戏区域拖动的UI控件或具有复杂动画或行为的UI控件。

如果你在按钮和textViews之后,那么我推荐你建议的方法。

我将使用runOnUiThread()方法定期更新UI元素的内容(Say TextView)(每16毫秒)...这样做不好吗?

我的游戏是否会受到Force Closes的影响?

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

如果您经常更新许多(我说的是10-20 +)组件,那么您可能会遇到无法响应的UI问题。

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

我认为用户界面不需要像你的openGL视图那样频繁更新,因为你没有以同样的方式晃动。 如果textView每秒更新20次,你仍然会感觉它不断变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM