光锥:定海Guangzhui
舰船、潜艇、舰载机与导弹共享同一片海洋、同一套物理。按下 1–8 选武器槽,500 毫秒内再按一次,就是发射。
01 关于
写浏览器里的系统:海战、载具、人体。它们的共同点不是题材,而是都要先有一套自洽的规则,然后让规则自己长出行为。
这个站点用来放三个做完的模拟、几篇工程笔记,以及一些还没成形的想法。所有项目都是纯前端,没有服务器,也没有账号。
02 Selected Work
一片海、一块战场、一具人体。三种完全不同的物理,同一种做法:先写规则,再看它跑起来。
舰船、潜艇、舰载机与导弹共享同一片海洋、同一套物理。按下 1–8 选武器槽,500 毫秒内再按一次,就是发射。
03 Method
下面三条不是设计口号,是从三个项目的代码约定与调试记录里抄出来的。它们比任何视觉细节都更能决定一个模拟器好不好用。
物理量有疑问就实测标定。防空导弹初速、机炮散布、粒子采样间距,都是打出来、量出来再定下的数。
《光锥:定海》· 调试小抄每一个提前返回都要给玩家一句反馈。静默失败没有堆栈、没有报错,只有玩家的一句「按了没反应」。
《光锥:定海》· 代码约定 05进入座舱、取玩家位置、判断飞机是否可操作——都只有一个入口。写第二套实现,两套就会慢慢漂移。
《光锥:定海》· 代码约定 04Interlude 诗
星火燃旧骨,共振待新弦。
凛冬淬寒刃,破晓裂长天。
风摧松未折,雪过梅愈坚。
岂容阴霾久,终迎曙色先。
江河纵九曲,东去势凛然。
不等东风起,自闯云中关!
黎明前最暗,星火可燎原。
千帆过尽处,春意已阑珊。
心有凌云志,何惧行路难。
待到雾散时,一啸动千山!
来路多坎坷,前路亦漫漫。
但持初心在,何愁不翻盘。
04 Notes
一些踩过的坑、算过的数,以及为什么最后选了那个看起来更笨的办法。
Appendix 代码
本页背景不是图片:几千颗粒子按一条对数螺线排成四条旋臂,随页面滚动进入视野才开始转。整段实现只有一个 draw call,没有泛光后处理,标签页切走就停。
/** 星火 — 本页背景的生成函数 * 四条旋臂,一条对数螺线,几千次心跳。 */const 星火 = (i) => { const r = Math.pow(Math.random(), 0.72); // 内密外疏 const θ = (i % 4) * TAU / 4 // 四条旋臂 + 3.3 * Math.log(r * 3.4 + 1.2); // 对数螺线 return { x: Math.cos(θ) * r, z: Math.sin(θ) * r, y: gauss() * (0.016 + 0.10 * Math.exp(-r * 3.4)), light: 1 - r * 0.8, // 越靠核心越亮 };};for (let i = 0; i < COUNT; i++) 星海.push(星火(i));// 每帧只做一件事:让它再转 0.012 弧度p = rotateY(p, clock * 0.012);
左右滑动查看完整代码