开源,一个简单的mmorpg原型

本来希望能做一个完整的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 引擎出来 ^_^

你可能感兴趣的:(RPG)