Android游戏开发基础小结2

      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能适应更多的游戏类型。