下载 App
#聚光灯gamejam开发者日志
10/0157 次播放综合
开发者日志 · 这个游戏是怎么写出来的
常有人问一句"这水墨是怎么画的"。索性把做法摊开讲一遍 —— 这篇不讲这版更新了什么,讲它是怎么做出来的。


一、一笔一笔画,不用贴图堆
画面不是贴出来的,是每帧现画的:用一套矢量画笔(NanoVG),线、面、渐变都当场画出来。
每条线还带一点抖动 —— 每一帧都不一样,像手在抖。所以它不是"打印出来的水墨",是"有人在纸上画的"。这一项看着小,却是整个味道的来源:线条一旦直得像尺子量过,武侠就成了图表。
尺寸用"设计单位"、按屏幕高度锚定:同一套数,手机、平板、电脑上都是一样的比例。
纵深用的是斜投影 —— 远近和高低共用屏幕的纵轴。所以人往远处走,是"斜着退到纸的深处",不是变小。这是有意选的:小说里的江湖是摊在纸上的一幅画。
二、人是火柴棍,这是想过的
火柴人不是省事。武侠里最好看的从来不是拳头长什么样,是那一招的分寸 —— 怎么拧腰、怎么甩腕、怎么在收招半路上就起了下一式。一根棍子反而把这些看得清清楚楚。
人是算出来的:一个姿态由十几个数决定(身体前倾多少、肩肘腿各转几度),画的时候把这些数解成关节位置。所以"招式"在代码里其实是一堆数字 —— 改一个人怎么出手,不是改画,是改数。
三、素材:画一批、挑一批、裁一批
书封五十一张、法阵图腾五十一张、兵器形制图六十张、场景十张,还有数不清的小物件。
先照着描述出一批水墨稿,再从里面挑,挑完写脚本量它的边框 —— 哪一块是墨、哪一块是留白,量出来自动裁掉,裁完把参数写回数据表。所以游戏里每件东西摆的位置、大小,是量出来的,不是试出来的。做完这一遍,再加一件兵器就只是往表里多写一行。
四、数据和行为分家
调参、兵器、秘籍、地图、招式,全部集中在几张表里;怎么跑、怎么画,放在各自的模块。好处很实在:想改哪件兵器的手感,只要动它那一行。
后来收到的几部"谱"也都是这么落下来的 —— 《六十兵器谱》成了兵器表,《六十兵器招式谱》成了招式表(每件兵器一行三式,连招名都照抄),《动作的力学》成了节奏表。看书和写代码,在这里是同一件事。
五、能画出来,就不猜
这是吃过亏才立的规矩。
- 有一回改城墙,连改五版全靠猜,一版比一版糟;
- 还有一回:五十支招式笔写得漂漂亮亮,却因为一处区间写错,一支都没被调用过 —— 画面看着"好像有特效",其实那是通用画法,连报了三轮才发现;
- 最狠的一次:改了一个常量的名字,漏改了三处引用,游戏里血条和按钮全部消失 —— 因为绘制画到一半抛了错,后面全被跳过了。
于是做了一套离线工具:把画笔"接"成只记录指令的桩子,用 Python 起一个真的 Lua 运行时,把游戏里的绘制代码原样跑一遍,再把画好的图拼出来看。不开游戏,就能看见这个界面长什么样、这一招长什么样。
再往后,自检也长出了牙:
- 单支笔画不画得出;
- 整条技能链路跑一遍,断言每一部秘籍的笔法真的被调用过(就是那次"一支没跑"留下的教训);
- 招式表逐条查:数字在不在合理范围、该有的字段全不全;
- 逐帧摆动自检:让一个假角色走真的出招逻辑,把兵器梢每一帧的位置记下来,量它走了多少路 —— 蝉翼那种袖中短剑只走五十来单位(本来就该只动腕),重棍走四百。哪一式只走了个位数,不用看画面就知道不对;
- 常量引用检查:代码里用到的每个名字,先在表里查一遍在不在。
六、每改一次,走同一套流程
改完 → 离线自检全跑一遍 → 构建 → 读运行日志确认零报错。这套流程后来救过很多次场:有几次自检全绿、构建也成功,日志里却躺着一条 "attempt to index a nil value" —— 那就是玩家会遇到的崩溃,提前逮住。
七、关于"一起做"
素材里有不少是用 AI 生成一批再挑的;代码也是结对写的 —— 我出谱(六十件兵器怎么使、五十部秘籍怎么打、动作按几拍走),它落成表、写成逻辑、再自检。这种写法的好处是:一个人也能撑起六十件兵器、五十部秘籍这种体量。坏处是要立规矩(见第五节),不然它会有板有眼地做错。


还欠着的
每件兵器自己那记绝招(影尽、斩龙式、问心无愧、饮尽八斩……)还没做;剑系的"舞"(剑花、缠头裹脑)刚从"挥"里分出来,正在调。慢慢补,江湖是一笔一笔画出来的。












