文 / 杨丰盛 游戏是一门综合的艺术,作者以铸剑为喻,形象地展示了移动游戏架构的艺术之美。 艺术是人的知识、情感、理想、意念综合心理活动的有机产物,是人们现实生活和精神世界的形象表现。文学可以是艺术,雕塑可以是艺术,音乐可以是艺术,电影可以是艺术……那么游戏呢? 游戏是一门综合的艺术 图3 游戏场景架构 图3描述了一个场景的元素架构与解析,其中UI界面、游戏对象、动画模块都将使用一个或多个XML文件来完成,通过XML的解析,最终将XML文件的内容输出到SceneA中。整个过程首先需要构建一个XML解析器,然后根据游戏的需要构建各种UI控件、游戏对象、动画等类。目前工程中用到的类包括: 图4 XML布局流程 实际上我正在进行的项目除封装了上面所说的三个模块外,还将整个游戏架构都进行了封装,包括图2中所展示的控制器、主线程、模型,整个框架都能通过XML文件直接编写。到这里,你所铸造的宝剑也应该出世了,带上宝剑,冲向游戏世界吧。 作者简介: 杨丰盛,轻灵数码研发部经理,精通Java、C/C++等语言及J2ME、BREW、MTK、Android、iPhone等平台。曾领导和参与《三国群英传》、《大航海传奇》等游戏的开发。著有《Android应用开发揭秘》。 (本文来自《程序员》杂志11年01期,更多精彩内容敬请关注01期杂志) 《程序员》01期精彩内容:成功产品三要素 《程序员》订阅
无论是单机游戏还是网络游戏、PC游戏还是手机游戏,都需经过如图1所示的逐步进化的过程。
图1 游戏研发的流程
任何一款游戏,都有故事情节、人物、场景、音乐和音效等内容,因此其中每一部分内容都需要追求以艺术化的手段,将游戏的意象情景更生动地展现给用户。作为程序员的我们,之前可能只是以为只有策划人员需要通过艺术来表达游戏的内容、测试人员需要带着艺术去欣赏并完善游戏的体验,那么程序员对游戏的架构和艺术之间又是怎么挂上钩的呢? 用程序语言铸造艺术之剑 从古至今,有不少人热衷于铸剑,而铸出的剑是否称得上艺术作品,关键就在于它是否能表达出铸剑人的情感和用心所在。那么对于游戏程序的架构来说,也需要能体现出架构师对游戏的整体架构和每一个模块的把握,以及赋予它们的“神力”;同时,好的架构还将贯穿于游戏开发的整个过程。简单的测试一下,你是否也会遇到以下这些问题呢?- 感觉游戏框架非常混乱,毫无条理?
- 开发完成后出现大量Bug,并且不知从何下手去解决?
- 出现很多难以重现的致命Bug?
- 添加某个功能或模块非常困难?
- 经过频繁的修改之后, 出现大量冗余代码?
- 视图(V):由UIView类的子类及其相关的UIView-Controller类来提供;
- 控制器(C):控制器行为通过主要由委托、目标操作、通知来实现;
- 模型(M):通过数据库和数据含义等协议提供逻辑模型,由控制器进行管理。
- 视图(V):由View和SurfaceView(或者自定义的视图)提供用户的界面,采用XML格式进行布局;
- 控制器(C):由Activity来管理视图和逻辑模型;
- 模型(M):向视图提供逻辑模型,由控制器来触发,比如各种Adapter接口。
图2 MVC游戏框架
由于图片大小的原因,我没有列出全部类结构,这些类包括在SceneInterface中定义一个界面事件的公共接口或者对Model采用“实体—对象—类”的方式进行扩展以及所需的工具类。 铸剑的最高境界—指导练剑之人 好的宝剑通常可以提高用剑之人的剑术!Google和苹果所铸造的Android、iPhone这两把宝剑,指导了无数的开发者。我们又何不学习学习Google和苹果这两位铸剑人的技艺呢? 下面继续分析Android可能会如何指导“练剑人”。在做Android应用开发时,Google推荐通过XML文件来布局界面,从而让UI界面和程序逻辑分离,方便维护;实际上Google对XML文件以及其他资源都进行了优化,这样做可以提高程序的运行效率。下面我们也将学习这一招,通过XML文件来布局游戏场景。 首先,将一个游戏场景(SceneA)中需要显示的内容分为UI界面(如按钮、菜单等)和游戏对象(如精灵)两部分;其次,UI界面和游戏对象可能都需要动画;最后,既然要使用XML文件来布局,就需要一个专门的解析器。稍作整理,现在我们所需要的模块如图3所示。- UI控件:UIText、UIProgress、UITexture、UIList、UIClick、UICheckBox
- 游戏对象:GameObj、EffectObj、Bullet、Enemy
- 游戏动画:PosAnimation、ColorAnima-tion、FrameAnimation