Android游戏开发中,有三种常用视图:View、SurfaceView、GLSurfaceView。这三种视图的含义如下:
View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等。
SurfaceView:基于View视图进行拓展的视图类,更适用于2D游戏开发。
GLSurfaceView:基于SurfaceView视图进行再次拓展的视图类,专用于3D游戏开发的视图。
目前主要做2D游戏开发,因此着重了解View和SurfaceView这两个游戏框架。两者的主要区别如下:
1.更新画布方面的区别。
在View视图中对于画布的重新绘制,是通过调用View提供的postInvalidate()与invalidate()这两
个函数来执行的,也就是说画布是由系统主UI进行更新。那么当系统主UI线程更新画布时可能会引发
一些问题,比如更新画面的时间一旦过长,就会造成主UI线程被绘制函数阻塞,这样一来则会引发无
法响应按键、触屏等消息的问题。
而SurfaceView视图中对于画布的重绘是由一个新的单独线程去执行处理,所以不会出现因主UI线程
阻塞而导致无法响应按键、触屏信息等问题。
2.视图机制方面的区别。
View视图没有双缓冲机制,而SurfaceView视图却有。实际上,SurfaceView就是一个由View扩展而
来的更加适合游戏开发的视图类。
这两个游戏框架各有优点:
对于游戏画面是属于被动更新的游戏类型,比如棋牌类游戏,应选择View视图比较合适,因为画
布的重绘主要是依赖于按键与触发事件(当玩家有了操作之后画布才需要进行更新)。这样,较之
SurfaceView而言,它减少了因使用SurfaceView需要单独起一个线程来不断更新画布所带来的运行开
销。
对于是属于主动更新画布的游戏类型,比如RPG、飞行射击等类型的游戏中,很多元素是动态的,
需要不断重绘元素状态,这时再用View就不合适了。因此游戏开发中到底哪种视图更为合适,这取决
于游戏类型、风格和需求。
总而言之,SurfaceView更适合于游戏开发,因为SurfaceView能适应更多的游戏类型。