我一直想知道canvas是否有一个限制边界。
我的意思是,如果我使用像drawline(), drawbitmap(), drawcircle(),
这样的函数,安卓真的会在画布上画一些东西,浪费一些CPU周期吗?
因为在所有绘图功能之后,屏幕上实际打印的图片是由屏幕大小决定的。如果我画的东西超出了屏幕尺寸,它就不会显示出来。
我想通过调用很多绘图函数在画布上做一些小细节,让我的表面“闪闪发光”。如果它是越界的,我不想使用它们,如果它们使我的绘图速度变慢。
我正在做一个表面视图结构的小游戏,谢谢你的建议。
例如:
我有一个机器人从屏幕外的<-> b走过来。
在画布上绘制机器人行走的图片需要20个绘图函数。如果我滚动屏幕,我就能看到机器人了。
因此,如果屏幕外的绘图功能真的需要与屏幕上的绘图一样多的时间。我必须检测到,只有当用户可以看到机器人的位置时,我才会绘图。否则,我就不会了。
如果绘图函数不会浪费太多的CPU周期,那么即使当前屏幕看不到机器人,我也可以每次都绘图。
发布于 2010-10-17 00:22:13
你的画布是由你的位图(2D)或openGL (3D,我没有经验)支持的。画布上的所有图画都被剪裁到剪裁矩形上,你可以放大、缩小、与新的矩形或路径相交等等。所以,你真的想在画布上绘制之前管理你的剪裁矩形,特别是如果它背后有一个大的位图。如果裁剪到与屏幕大小相等的区域,则可以节省CPU周期。如果您的游戏是滚动类型的游戏,您可以裁剪到比屏幕大小更大的区域,并在周围平移,偶尔在屏幕外绘制以更新屏幕上的区域。如果你的游戏在所有方向都有无限滚动,那么你会想要有多个较小的画布,你可以在主中央画布周围绘制,并根据滚动游戏的方向从左到右,从上到下翻转它们。对于小型设备来说,一个包含一个画布的大型位图可能会占用太大的内存。
发布于 2010-10-17 02:41:19
当画布覆盖整个屏幕时,另一件可以加快画布绘制速度的事情是使用没有背景的主题。默认主题至少有一个可绘制的彩色背景,当您将视图放在它上面时,这会导致绘制速度变慢,即使您的视图充满了整个屏幕。
使用主题,例如:
<style name="Theme.NoBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>
Romain Guy在http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/上对这种现象有很好的描述
https://stackoverflow.com/questions/3949606
复制相似问题