这个站点背后没有游戏引擎。每款游戏向一个很小的运行时注册自己,拿到一块 canvas,然后每一帧画出自己的世界。没有精灵图、没有音频文件、没有物理库。

运行时是刻意做薄的

共享代码只做四件事:创建并调整 canvas 尺寸;把鼠标、触屏、键盘输入翻译成简单坐标;播放合成音效;提供几个绘图助手(圆角矩形、带阴影的文字、HUD 条)。

就这些。碰撞、重力、回合顺序、计分,全都活在各款游戏内部。代价是四十款游戏把同一个问题解决了四十遍;好处是每款游戏都是一个文件,可以一次读完。

画出来,而不是加载进来

典型的浏览器游戏会带上几 MB 美术资源。这里,一辆坦克是一个圆角矩形加两个小矩形;一个水果是圆加一道高光弧;一个僵尸是胶囊加两个点。

这不只是下载体积的问题。用形状作画可以在运行时修改:球拍被击中时可以发光,砖块碎裂前可以闪,角色可以免费地挤压拉伸。用贴图,这些效果要额外帧;用形状,它们只要三行代码。

代价是个性。画出来的坦克永远不会像设计出来的坦克。我们用这一点换来了瞬间加载,以及在百余款游戏之间保持一致视觉语言的能力。

不用文件的音效

每个音效都是一个带包络的振荡器:频率、时长、波形、音量曲线。打击是短促的方波加一段滤波噪声;胜利是四个音符的序列。

合成音频有两个实际好处:没有东西要下载,每个音色都能在运行时调。它也逼着音效保持简单,而简单恰恰能让音效不至于变得烦人——在一个只玩九十秒的游戏里,这是真实的风险。

限制为什么是好事

小游戏成败,取决于前十秒能不能让人看懂。当你没法藏在美术后面,就必须把规则做得显而易见:形状要大、要能读,操作只有一个,分数要会动。

约束也让范围保持诚实。需要物理引擎才能好玩的游戏,在这条流水线上活不下来;活下来的设计,都是「乐趣来自一个清晰念头」的那种——合并、反弹、堆叠、切开。

难受的地方

有些类型根本够不到。任何需要动画、角色、剧情过场的游戏,用扁平形状做都别扭。赛车和平台跳跃需要关卡设计,而那部分的工作量会超过游戏本体。

而且没有美术时,「打磨」特别贵。一个十秒的反馈循环——抖动、闪光、音效、分数跳出——调起来和核心机制一样费时间。

剩下的东西

剩下的是一座游戏库:一秒打开,一只手能玩,关掉不损失任何东西。这是个很窄的目标,但值得瞄得准一点。