也来谈谈网页游戏的开发

时间:2024-03-01 18:19:21

先拿网页游戏模型来说,现在市面上的页游可以归结为SLG(战争策略),RPG,ARPG,SIM(模拟养成)。
从通讯协议上来说就是两种HTTP,TCP(或者还有其他,本人才疏学浅不得而知。)
先说SLG,市面游戏也很多了。
SLG一般的用户需求分为建造,研发,造兵,生产,战争。(这些模块基本上每个SLG页游中都是存在的。)
像建造,研发,造兵,生产,部队移动这些模块都是周期性的处理。建造,研发,造兵,生产资源都是随着时间的延续发生数量的变化。这种东西解决方案按照本人所知一般都是服务端有一个服务专作处理。一般叫做周期服务。也有的可能是直接写在用户登录或者其他时间触发的时候进行计算。但是这些东西是有顺序性的,要对这些任务进行排序后再来执行。
对于这种的需求现在也有游戏进行了改革,优化了体验感,优化了性能,也优化了收入。类似于傲视天地的解决方案,先将结果生成,而后增加操作的公用CD时间(玩家可以消费冷却CD时间)。这样省去了周期服务,也让用户体验在先,也不需要考虑事件的顺序。
页面表现来说现在大家也都在采用FLEX,FLASH,SL来做页面,必经用户的体验要比纯网页好很多,通讯方式么一般也都是HTTP,在这种模块下没必要去用TCP搞个服务端,不过据说也有用ERLANG在做长连接的游戏(好像还没面市),在页游热的时候(FLEX的人员工资也暴涨了)。
FLEX,FLASH,或者SL的通讯协议来说,一般有XML,JSON,AMF0,AMF3,或者其他数据契约。
下面来说说战斗,现在SLG的通病都是战斗模式比较没意思,玩家的乐趣集中在了生产,发展。在较早的页游一般战斗就是一纸战报(服务器根据战斗公使换算),后来有了一些改变,在战斗之前进行布阵,战斗还是服务器算,可以通过FLASH看电影(战斗过程),比一纸战报好很多了(热血三国,傲视天地,三十六计)。
再说说SLG的任务系统,一般也可以看做引导任务,或者主线。这个东西需要任务编辑器,定义任务模型。一般来说在解决方案上可以用事件或者SPRING的AOP来监听正常的建造,研发,造兵,生产来触发或者完成任务。

 

我们也来讨论讨论ARPG在网页游戏中的研发。ARPG或者RPG现在市面上看到的大多是FLEX+SOCKET SERVER或者JAVA APPLET+SOCKET SERVER(倾城)。
ARPG和RPG大家都比较熟悉了,人物是可以动的,是要自动寻路的,技能是要有效果展示的,要看到其他用户的操作或者效果。这些东西用网页不太好做,当然也有仁兄会说JS类库也可以,仁兄那只是一种技术上的挑战或者突破并不符合团队或者公司的开发模式。现在的ARPG用FLEX居多,APPLET因为涉及到技术的高度,可以做,但是做的少,必经没有FLEX那么贴近人民,当然倾城已经做出来了,而且很多私服,大家不要想着多开私服,还是好好研究研究解决方案吧。当然微软的SL理论上也可以(在CNBLOGS上有个“深蓝色右手”的BLGO是讲述用SL开发ARPG游戏的,赶兴趣的可以看看。)据说HTML5也是比较彪悍的,可能也能符合我们的需求,不过还是看到实物再说吧,小弟也是没怎么研究HTML5,都是听别人说很强大。
说说CLIENT要实现的大体功能吧,现在的大部分ARPG都是2D,45度。一般在客户端解决地图引擎,物理遮罩,自动寻点(A*算法),人物八个面的展现(其实是4个OR5个),技能效果展示,和服务器的互通等等。传输协议数据,解析数据契约,进行逻辑处理,或者绑定数据源触发行为事件。

说完了CLIENT来说说服务端,现在大家服务端很多都是用JAVA做的,其实用什么语言做都可以C,JAVA,C#都是可以的。一般来说都会采用TCP协议方式,安全么。SOCKET一般分为同步、异步,阻塞、非阻塞。现在大家考虑性能和稳定性JAVA一般用NIO,有成熟的架构。(如MINA),在C#中可以看看在3.5中微软新提供SocketAsyncEventArgs的类,相当强大。(据资料显示该类库基于微软的IOCP,而且通过微软强大的THREADPOOL来管理。呵呵,有点夸张。)我测试过50000的同时链接,性能抛出逻辑和数据库读写来说木的问题,而且是笔记本测试,网上有人说过测试到10W。在C中这个东西就没什么可研究的,成熟的IOCP一堆堆的。服务端的解决方案的选取要着重考虑性能和稳定性,09年很多RPG类的游戏CLIENT都做的不错,问题都出现在了SERVER端。

说完了CLIENT和SERVER来说说通讯协议,TCP首先是安全的,这点毋庸置疑。我们要处理的是粘包和定义规范的包。大家一般都会用4字节的INT作为头或长度,然后带上具有固定格式的参数来做为数据契约。一般有XML,JSON,序列化字符,AMF系列。然后就对于粘包或者非常意外的丢包的处理。这里就不细致讨论了,各家有各家的办法吧。

然后就是系统的搭建了,后台的拿到的CMD和PARAM来做逻辑处理了,这里可以用反射,SPRING都可以。FLEX也是用一致的数据契约做对应的逻辑处理或者数据绑定变更的事件行为。各家有各家的解决方案。呵呵。