首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上将画布移植到OpenGL上

在Android上将画布移植到OpenGL上
EN

Stack Overflow用户
提问于 2017-12-22 03:28:27
回答 1查看 760关注 0票数 0

我正在制作一个2D Android游戏,目前,我是在画布上画的。

当我试图画很多圆圈笔画时,框架非常下降。所以我想我应该用一些更有力的东西来画这幅画。

将基于画布的游戏移植到例如OpenGL ES或任何其他游戏引擎的最简单方法是什么?我应该把我的游戏移植到哪个游戏引擎?

EN

回答 1

Stack Overflow用户

发布于 2017-12-23 14:06:43

我碰巧正在用我自己的2D引擎做一个类似的端口/扩展,我自己也曾经有过这个问题。

我假设您的引擎目前的工作方式如下:

  1. 它使用SurfaceView
  2. 在游戏循环中(在一个单独的线程上),它调用lockCanvas()
  3. 然后,它使用一些CanvasdrawLine()drawPath()等方法(引擎下的Skia库)来提取该drawLine()
  4. 然后,它调用unlockCanvasAndPost()
  5. 在此之后,使用Thread.sleep()可能需要等待一段时间。

如果这一假设是正确的,那么:

首先,有许多原因,为什么您的框架可能很低(例如,在游戏循环中创建任何对象,从而导致垃圾收集启动)。如果您已经测量过它(使用System.nanoTime()),并且调用drawCircle()方法花费的时间太长,那么:

您可以尝试创建位图:

代码语言:javascript
复制
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
c.drawCircle(...);

您可以在初始化时将圆圈绘制到它们中,然后在游戏循环中绘制位图(使用drawBitmap()方法)。这比画圆圈要快得多。

如果这仍然太慢,您可以尝试OpenGL es2.0。我推荐遵循一个教程,如书OpenGL为安卓系统的ES 2 -这一个有不错的例子,为2D和纹理。我建议从他的纹理示例源代码开始,并对其进行修改。

你会发现(你可能会被震惊地发现),你不能使用OpenGL ES来绘制除点、线和三角形之外的任何形状,并用纹理渲染它们。这意味着这里最简单的方法是对每个圆圈使用两个三角形来形成一个矩形,并将一个来自Bitmap的纹理应用到它上,通过在上面画一个圆圈来初始化它。

这是“移植”当前绘图的最简单方法,但它仍然相当复杂。我建议您先尝试一下Bitmap-based方法。

关于游戏引擎,它们可能基于OpenGL ES本身(这不是一个游戏引擎,而是一个低级的GPU )。它们可能使过程更容易,但您的选择将类似于最后一种方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47935491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档