Android 游戏开发中的几种绘图方式

在大部分 Android 游戏中,游戏画面的更新都是通过单独线程来完成的,若是直接在主线程上绘制,可能会造成无响应(ANR)等问题,因此需要在单独线程中完成绘图。

由于游戏场景有时会很复杂,可能需要分别绘制背景、控件、人物、文字等内容,部分 3D 游戏还需要渲染贴图,因此在单独线程中绘图也可能会发生卡顿或丢帧的问题。这个时候就需要想办法提高绘制效率、优化内存,尤其是频繁重绘且重绘物体较多的程序。

重绘一般分为以下两种方式:

  • 被动式: 一般这种方式常用于棋类游戏,只在监听到触摸后才进行重绘,在无触摸事件时便闲置下来,对系统资源的需求并不会太高。
  • 主动式: 这种方式就好像是在播放动画一样,画布在不停地重绘,在绘制大量物体时对系统资源的需求较大,因此性能低的设备可能因此发生卡顿或丢帧。
    一般情况下,2D 游戏使用 SurfaceView 并配合 Canvas 即可进行快速开发,对于被动式重绘来说这种搭配还是很好的,不仅响应迅速,还会减轻开发难度。

因此对于一般的开发来说,直接使用 Canvas 画图就可以满足需求。
关于 OpenGL 的绘图方式,将在以后的文章中提到。