4

我正在使用Canvaselement 开发一个 Android 游戏。我在大型游戏地图上绘制了许多图形元素(精灵)。这些元素由标准图形函数绘制,如drawLine,drawPathdrawArc

测试它们是否在屏幕上并不难。所以,如果他们不在屏幕上,我可能会完全跳过他们的绘图程序。但即使这样也有 CPU 成本。我想知道是否Android Graphics Library可以比我更快地做到这一点?

简而言之,我是否应该尝试绘制所有内容,即使它们完全超出屏幕坐标,相信Android Graphics Library会照顾它们并且不会花费太多 CPU 来尝试绘制它们,或者我应该自己检查它们的绘图区域矩形以及它们是否完全超出屏幕,跳过绘图程序?哪个是正确的方法?哪个应该更快?

ps:我的目标是Android v2.1及以上。

4

1 回答 1

4

从一个不完全科学的测试中,我绘制了比屏幕更大的区域的位图,我发现事先检查位图是否在屏幕上似乎并没有太大的不同。

在一项测试中,我将一个 Rect 设置为屏幕大小,并将另一个 Rect 设置为位图的位置,并在绘制之前检查了 Rect.intersects() 。在另一个测试中,我只是绘制了位图。在 300 次以上的平局之后,没有明显的趋势——有些走一条路,有些走另一条路。我每帧都尝试了 300 次绘图测试,帧与帧之间的差异远大于检查和未检查绘图之间的差异。

我认为可以肯定地说 Android 检查其本机代码中的边界,或者您会期望有相当大的差异。我会分享我的测试代码,但我认为在你的情况下进行自己的测试是有意义的。点的行为可能与位图不同,或者您的绘画或画布的某些其他功能会改变事物。

希望能帮助你(或其他人偶然发现这个线程,就像我对同一个问题所做的那样)。

于 2012-09-13T13:13:00.363 回答