要说这个《凤凰杨过游戏》是怎么折腾出来的,说白了,就是那段时间我闲得蛋疼,又看不惯现在那些动不动就几百个G的大制作。我就琢对一个事儿:能不能用最简单、最笨的方法,复刻一下咱们小时候玩的那种武侠RPG的感觉?
起炉灶:决定从哪下手
我第一步就是选引擎。现在Unity、UE搞得太复杂,我不想花精力去学那些花里胡哨的渲染。我摸了摸手里那台快报废的笔记本,就决定试一把那个国内小圈子里传得很神的“凤凰”框架。听说它内存占用小,对老机器特别友但资料少得可怜,网上全是零散的文档,跟一锅粥似的。
我找了一圈素材,发现以前存的几百个G的素材盘早就坏了。没办法,只能自己动手,丰衣足食。我打开了画图板,愣是把杨过那套粗糙的像素图给画了出来。光是跑动那四个帧,我就磨了一个下午,画出来的杨过楞是有点驼背,像个刚从土里扒出来的兵马俑。但无所谓,能动就行。
实施过程:卡壳与硬啃
我着手开始搭建最基础的地图逻辑。这个“凤凰”框架,它宣传的是傻瓜式操作,但实际用起来,简直是反人类。它的坐标系跟主流的框架是反着的,我写了两天的移动脚本,杨过跑起来永远是往左上角飘。我查阅了半天资料,才弄明白它默认的Y轴竟然是反向的。我气得差点把键盘砸了,但又不得不忍着,毕竟是自己选的路。
最要命的是数据库。我不想用外部数据库,就想把所有的物品和NPC数据都塞进一个文本文件里,用程序去读取和解析。这文本文件我码了差不多三百多行,光是给郭靖和黄蓉那堆乱七八糟的属性赋值,就花了将近五个小时。每次我改一个物品的数值,程序就要重新编译一次,慢得让人想哭。效率低得一团麻,完全是靠人力硬扛。
- 实现了基础的行走和碰撞检测。
- 配置了简陋的战斗界面,但没敢做复杂的招式判断。
- 整合了文本数据,杨过能和小龙女说几句“等我”之类的废话。
转折:一个意外的插曲
你问我为什么非要用这个麻烦得要死的“凤凰”?这里面有个故事。当时我正在我家附近的咖啡店里敲这个东西,突然进来一个以前公司的老同事,我们之前因为一个技术选型的问题吵过架,他死活说只有Java才能撑住大型架构,其他都是玩具。那家伙当时正在用一台新款的MacBook,吹嘘他新的百万级项目。我当时笔记本已经卡得快冒烟了,但我就是不服气。
我决定用这个破烂框架,就是想证明,即便是最简陋的工具,最少的资源,也能跑出一个完整的、能玩的东西来。我就是要让他看到,代码不是只有堆配置、堆语言才能堆出来,有时候就是靠一股气。
他当时瞄了一眼我的屏幕,撇了撇嘴,问我这是不是哪个老游戏跑的模拟器。我没搭理他,直接把我刚刚调试好的战斗模块跑了一遍。虽然杨过砍一只野兔的动作僵硬得像在跳广播体操,但逻辑是通的。
实现:能跑就行
我熬了两个通宵,把地图从最初的只有一块草地,扩展到了三个区域:终南山下、襄阳城外、绝情谷入口。绝情谷里只有一棵树,而且不能进去。
这游戏3总算是跑起来了。虽然画面粗糙,NPC的AI蠢得像块石头,战斗系统更是简陋到只有普攻,但它确实实现了我一开始的愿望:一个基于文本和简单像素的武侠RPG。它占用的资源少到惊人,我那个快寿终正寝的笔记本跑起来一点压力都没有。我把这个“凤凰杨过”的游戏包发给了几个以前的同事试玩,他们玩了不到十分钟就说眼睛快瞎了,但都承认,这个破框架能做出这种东西,也是挺牛的。
至于那个老同事?他后来加我微信,问我要那个“凤凰”框架的资料。我没回他。有时候,实践本身就是最好的回击。