本来希望能做一个完整的mmorpg引擎,但是个人能力有限,因此开源和大家探讨。
这个原型实现了走动,障碍阻挡,私聊,公聊,施放魔法,杀死怪物,和怪物刷新。
客户端用flash CS3编写,语言为AS3。服务端用erlang编写,erlang是个小众语言,这里不介绍了。
Flash源码: source.rar (437.64 KB)
(必须将data资源文件夹与fla放在同一目录,否则编译后执行会找不到文件报错)
资源包及编译后的客户端: data.rar (962.23 KB)
服务端源码: server.rar (3.16 KB)
程序使用2345端口,请注意关闭防火墙。
客户端和服务端都有些bug,代码注释不多,类和变量命名也很随意,仅抛砖引玉。如果大家对代码有什么不清楚,欢迎跟帖提问。
下面是我关于mmorpg引擎的一些特性构想:
无缝地图:
整个游戏世界是一个大场景,玩家在游戏中游览不需要等待地图切换。
基本原理是把世界场景切块,移动时,根据玩家当前全局坐标计算出屏幕可见的地图块,并将包围中心块的8个块一起载入做缓冲。
这个特性实现了一部分,上面的代码中地图障碍已经分块。我另做了一个分块的地图滚动,没有放进客户端。怪物,玩家,npc和地上物品的分块则需服务端配合。
粒子系统及代码特效:
在网上见过一些flash粒子系统生成的烟雾和火焰,还有用滤镜做的水波效果,如果集成这些接口,能减轻不少美工的工作量及网络带宽压力。这一部分我没有经验,有待大家出谋划策^_^
音乐:
大致说来,音乐格式可以分成两大类,波形记录格式如mp3、wma,乐器合成格式如mid。Flash能够直接支持的只有mp3,一分钟的mp3大约1MB,对web游戏来说,这个容量太可怕了。我认为音乐格式应当选择mid。
鉴于flash不支持mid(为什么lite可以支持PC flash反而不支持? flash 10也没有提到mid支持,强烈呼吁加入),在flash中播放我们只能自己写mid的格式解析。以二进制方式加载文件,然后根据mid标准合成声音。这个方案理论上可行,但是实现难度很高,而且cpu消耗估计也不小。
另一个方案是flash调用javascript播放mid。我比较看好此种方案,不过也没有具体去做过,要考虑的是语言交互及浏览器兼容问题。
低带宽占用:
低带宽是相对而言的,相比传统mmorpg的c/s模式,web mmorpg把客户端搬到了网上,我们必须从比硬盘的速率低几个数量级的网络读取资源(主要是图像)。由此,我提出几个意见:
1、图像采用gif和高压缩比的jpg。相较png,gif的容量小得多,也同样支持透明。虽然gif只支持256色,但我认为256色的表现力已经相当不错,暗黑破坏神2的画面就是256色的。Jpg图像常用的品质是80%,减少到30%,画面效果基本不变,容量可降至一半。
2、预加载。在玩家网络空闲如登录输入用户名密码、聊天、买东西的时候,预测并加载玩家过一会儿将用到的图像至浏览器缓存,降低带宽峰值需求。
3、合并小图。发起http请求有一些固定的消耗,将一些容量较小,尺寸一致的图片合并可以减少请求的次数,如图标、头像等。
容错:
容错方面有三个目标:1、正确运行。2、客户端与服务端数据一致。3、流畅。
1是指网络连接发生异常时,客户端的代码要能正常的运行下去,这是商业游戏的基本要求。
2同时也蕴含了所有客户端看到的画面及数据也一致。
3并不是一个容错系统的必备要求,但在网络游戏这个前提下,对玩家体验的影响极大。事实上它要求资源加载与游戏进程异步进行,假如一个资源尚未加载完毕就已经过期,那么应当立刻取消旧资源连接释放带宽。同时,在游戏中,即使缺乏某些资源,也必须运行下去。
如果3与2产生冲突,应先保证2。
容错需要做大量细致的工作,我的代码远远没有达到这个目标^_^ 共同努力。
可扩展:
具体来说,是做到更换游戏资源及数据设定不需要重新编译。在我的代码中,运行后先读取一个配置文件,配置文件内容为一个JSON字符串。将字符串解析便可得到各种数据及资源文件地址。使用JSON配置可行,但在数据查询的时候不够灵活,期待大家有更好的提议。
另一部分,游戏的UI也是变化很大的部分。我的代码中UI操作全部集中到了一个单独的类里,但是实现还不够理想。
最后,期待与天地会众多高手合作,做一个完善的国产开源mmorpg引擎出来 ^_^
这个原型实现了走动,障碍阻挡,私聊,公聊,施放魔法,杀死怪物,和怪物刷新。
客户端用flash CS3编写,语言为AS3。服务端用erlang编写,erlang是个小众语言,这里不介绍了。
Flash源码: source.rar (437.64 KB)
(必须将data资源文件夹与fla放在同一目录,否则编译后执行会找不到文件报错)
资源包及编译后的客户端: data.rar (962.23 KB)
服务端源码: server.rar (3.16 KB)
程序使用2345端口,请注意关闭防火墙。
客户端和服务端都有些bug,代码注释不多,类和变量命名也很随意,仅抛砖引玉。如果大家对代码有什么不清楚,欢迎跟帖提问。
下面是我关于mmorpg引擎的一些特性构想:
无缝地图:
整个游戏世界是一个大场景,玩家在游戏中游览不需要等待地图切换。
基本原理是把世界场景切块,移动时,根据玩家当前全局坐标计算出屏幕可见的地图块,并将包围中心块的8个块一起载入做缓冲。
这个特性实现了一部分,上面的代码中地图障碍已经分块。我另做了一个分块的地图滚动,没有放进客户端。怪物,玩家,npc和地上物品的分块则需服务端配合。
粒子系统及代码特效:
在网上见过一些flash粒子系统生成的烟雾和火焰,还有用滤镜做的水波效果,如果集成这些接口,能减轻不少美工的工作量及网络带宽压力。这一部分我没有经验,有待大家出谋划策^_^
音乐:
大致说来,音乐格式可以分成两大类,波形记录格式如mp3、wma,乐器合成格式如mid。Flash能够直接支持的只有mp3,一分钟的mp3大约1MB,对web游戏来说,这个容量太可怕了。我认为音乐格式应当选择mid。
鉴于flash不支持mid(为什么lite可以支持PC flash反而不支持? flash 10也没有提到mid支持,强烈呼吁加入),在flash中播放我们只能自己写mid的格式解析。以二进制方式加载文件,然后根据mid标准合成声音。这个方案理论上可行,但是实现难度很高,而且cpu消耗估计也不小。
另一个方案是flash调用javascript播放mid。我比较看好此种方案,不过也没有具体去做过,要考虑的是语言交互及浏览器兼容问题。
低带宽占用:
低带宽是相对而言的,相比传统mmorpg的c/s模式,web mmorpg把客户端搬到了网上,我们必须从比硬盘的速率低几个数量级的网络读取资源(主要是图像)。由此,我提出几个意见:
1、图像采用gif和高压缩比的jpg。相较png,gif的容量小得多,也同样支持透明。虽然gif只支持256色,但我认为256色的表现力已经相当不错,暗黑破坏神2的画面就是256色的。Jpg图像常用的品质是80%,减少到30%,画面效果基本不变,容量可降至一半。
2、预加载。在玩家网络空闲如登录输入用户名密码、聊天、买东西的时候,预测并加载玩家过一会儿将用到的图像至浏览器缓存,降低带宽峰值需求。
3、合并小图。发起http请求有一些固定的消耗,将一些容量较小,尺寸一致的图片合并可以减少请求的次数,如图标、头像等。
容错:
容错方面有三个目标:1、正确运行。2、客户端与服务端数据一致。3、流畅。
1是指网络连接发生异常时,客户端的代码要能正常的运行下去,这是商业游戏的基本要求。
2同时也蕴含了所有客户端看到的画面及数据也一致。
3并不是一个容错系统的必备要求,但在网络游戏这个前提下,对玩家体验的影响极大。事实上它要求资源加载与游戏进程异步进行,假如一个资源尚未加载完毕就已经过期,那么应当立刻取消旧资源连接释放带宽。同时,在游戏中,即使缺乏某些资源,也必须运行下去。
如果3与2产生冲突,应先保证2。
容错需要做大量细致的工作,我的代码远远没有达到这个目标^_^ 共同努力。
可扩展:
具体来说,是做到更换游戏资源及数据设定不需要重新编译。在我的代码中,运行后先读取一个配置文件,配置文件内容为一个JSON字符串。将字符串解析便可得到各种数据及资源文件地址。使用JSON配置可行,但在数据查询的时候不够灵活,期待大家有更好的提议。
另一部分,游戏的UI也是变化很大的部分。我的代码中UI操作全部集中到了一个单独的类里,但是实现还不够理想。
最后,期待与天地会众多高手合作,做一个完善的国产开源mmorpg引擎出来 ^_^