Flash在线ARPG游戏引擎开发设计思路与心得

从开始学习flash在线游戏的开发到游戏引擎基本功能开发完成。在这个过程中,走了不少弯路,做了不少探索,也收获了一些宝贵的经验。

  这篇文章一方面是总结一下在开发过程中学到的在线Arpg游戏引擎的设计思路和积累开发的经验,另一方面也是和大家分享,希望对喜欢flash在线游戏开发的朋友有一些帮助,也请大牛们看了后在拍砖的同时对设计上没有考虑到或者考虑欠妥的地方能给予指正。

  到目前游戏引擎的完成了三个部分的基本功能的开发:flash客户端,游戏服务器,压力测试工具。下一步会着手地图编辑器的研发。

  本文将从开发技术讲起,阐述各个部分的设计思路和设计原则,各个游戏部分大体的处理流程和容易遇到的问题。

一.开发需要的技术基础和开发工具

Flash客户端

技术要求:

必须熟悉Flash ActionScript3.0编程,这个是基础必须拿下

掌握基本的设计模式,主要有mvc、门面模式、工厂模式等。目的打造一个清楚合理的游戏框架,才能让客户端具备很好的扩展和维护性。尤其是引擎前端在真正开发游戏时会有大量的界面展现和功能模块,如果没有良好的框架,到后面会很乱,整个代码维护成本高。

开发工具:Adobe Flash Builder 4.5  也是在咱们论坛里下载的破解版

服务器端

技术要求:

l.  c++或者java必须其一,我是有近10年java开发经验,所以自然就选择的java。之前用java开发过搜索引擎,所以对java的性能还是有信心。

2  .网络编程,在线游戏大量的消息传递,必须能开发高性能的网络层,目前是采用了java的mina。Linux下用epoll方式网络层的执行效率还是相当不错。

3. 多线程开发,这个是对编程能力要求比较高的地方。现在java提供了一套比较完备的线程池和原子类对开发多线程应用容易了不少,同时也比加锁方式,在性能能上提高了很多。

4 .数据cache,游戏服务器要有很快的处理能力,数据都必须在服务器启动时就加载到cache里,处理过程中要最大限度的减少内存分配的操作。同时定时做持久化保存。

5.  数据库开发,mysql数据库或者Redis数据库,key-value数据库的性能比mysql要强不少,由于游戏的持久化存储的数据相对来说比较简单,同时和cache中keyvalue的存储方式也正好对应,可以考虑用Redis数据库。不过对redis研究还不够,不知道redis在数据库在数据库实时备份和负载均衡方面是否方便,同时对redis数据库的稳定性也还没有底。相对mysql更成熟这些方面没有顾虑,目前还是采用了mysql。


开发工具:

    Eclipse
    Mysql
    Apache或nginx 等web服务器用来发布游戏程序、游戏资源和配置文件。
    性能调优工具 JProfiler 对服务器端开发来说这个是必备,不仅可以用来解决内存泄漏等bug,同时也能检测那些代码执行效率低,还能检验那种设计思路效率更高。服务器端的研发执行效率是第一位。


  这里把需要用到的技术和开发用的工具做了简单的讲解,具体的下载,安装可以在网上查询。下边将谈谈引擎设计的原则和思路。


二.引擎设计

  首先,对没有在线游戏开发经验的朋友来说,要提一下在线游戏和单机游戏的设计上的区别。这次之所以开始了在线游戏引擎的开发,也是和这个问题有一定关系。我是在4个月前,在咱们论坛看到有人把他的flash游戏的代码分享上来了。在学习后发现分享的代码只能算是一个单机游戏,并且也仅有任务和人物移动。不过也是从这个程序,让我了解了flash游戏如何在程序中控制和调用swf的资源,一步一步从开始的兴趣到逐步转入真正flash游戏引擎的开发之旅。

  在线游戏和单机游戏最大的不同在于,在线游戏客户端只是展现和交互,真正的游戏逻辑要在服务器端实现。比如攻击,客户端只是发了一个攻击消息,选用相应的技能,攻击的运算都是在服务器端完成后再发给玩家和视野范围内的其他玩家。再比如移动,客户端计算寻路,在移动前把一秒钟左右的移动的序列发给服务器端,然后每隔1秒钟要发下一秒的移动序列。  服务器端把移动序列转发给其他能看到的玩家。每个操作客户端只是发起者,服务端才是执行和分配者。同时重要的操作,服务器端都要严格核查信息的可靠性。

下面分别讲一下客户端和服务器端的设计思路

客户端设计

  客户端的设计必须要从框架讲起。

  在前面强调过,客户端设计的核心就是要具备很好的可扩展和可维护性。在线游戏现在越来越复杂,提供给用户的功能也越来越多。单纯看代码文件的大小,一般展开后代码都在10M以上,做成swf文件后都在1m多(仅仅是代码,不包含任何资源和配置文件),单单从这个数量上就能体会到代码有多么庞杂。如果没有一个好的框架,后续功能的开发和维护都会变成一场噩梦。
Flash现在还没有看到有类似j2ee的struts、jsf等为大家所公认的开发框架,所以在开发客户端时必须自己打造框架。

  框架的设计原则主要有两点:

  一是把显示,处理逻辑,消息层分开,切记不能混杂在一起。分开的目的一是结构清楚一目了然,二是提高代码的复用。

  二是模块化设计,要把功能梳理开,把功能封装到相应的模块中,便于扩展和维护。模块间的调用可以考虑采用消息机制,这样可以减少模块间的耦合度。不过,如果是采用消息机制,就一定要建好文档。消息机制和实时调用相比,程序不好跟踪,经常看到触发一个消息后,不好定位消息触发的模块功能。尤其是在代码维护时,会麻烦一些。

显示面板的设计

  现在flash可以用控件的方式开发面板,控件的背景,文字,颜色等均可以用xml定义,对习惯html开发的人来说,无疑是方便了很多。这样可以把面板制作和面板处理逻辑分开,方便了美工人员和编程人员的协作。

你可能感兴趣的:(Flash在线ARPG游戏引擎开发设计思路与心得)