[{"data":1,"prerenderedAt":388},["ShallowReactive",2],{"blog-post-/zh/blogs/building-orbit-courier":3},{"id":4,"title":5,"body":6,"description":370,"extension":371,"meta":372,"navigation":381,"ogImage":374,"path":384,"seo":385,"stem":386,"__hash__":387},"zh/blogs/zh/39.building-orbit-courier.md","慢迭代：我和 AI 打磨 Orbit Courier 的故事",{"type":7,"value":8,"toc":354},"minimal",[9,18,21,30,33,36,39,42,48,53,58,68,71,74,81,86,89,92,95,99,102,107,110,113,119,124,127,130,133,139,144,147,150,154,157,160,163,166,169,172,175,178,182,185,188,191,197,202,205,208,211,214,218,221,224,227,233,238,241,244,250,255,258,261,265,268,271,274,277,289,293,296,301,304,310,314,317,323,327,330,336,341,344,347],[10,11,12,13,17],"p",{},"AI 教会了我一个没想到会喜欢上的词：",[14,15,16],"strong",{},"慢迭代","。",[10,19,20],{},"我的工作生涯，大部分时间都朝着另一个方向走。Scrum、Sprint、交付、下一轮改进，总有理由再快一点。可在和 AI 做一个小游戏的时候，我却开始考虑另一种节奏：因为喜欢，就把它慢慢做下去。今天调一束灯，改天添一座桥，看着自己的小世界一点点完整起来。",[10,22,23,24,29],{},"10 月 7 日，我把这种感觉写成了一篇",[25,26,28],"a",{"href":27},"/zh/notes/slow-iteration","手记","。当时想到的比喻是写小说：隔几天回来，添一点，改一点，看着那个世界逐渐成形。",[10,31,32],{},"接着，是那些图片。",[10,34,35],{},"一辆陶瓷小车停在浮岛上，木桥朝着另一座平台延伸，一小段玻璃接住晨光。金属是温暖的，岩石有分量，整个世界像是悬在一个安静的清晨里。",[10,37,38],{},"我突然很想开着这辆车，走进这张图。",[10,40,41],{},"如果借助 AI，慢慢把一个小游戏打磨成自己心目中的精品，会是什么样？这个念头，让 Orbit Courier 有了下一步。如今，Morning Crossing 已经是它正式开放的第一条路线。而走到这里，经历了很多次看图、选择、再说一句“Go”，也经历了后来才认真面对的问题：漂亮的世界，还得让人玩得进去。",[10,43,44],{},[45,46,47],"em",{},"封面是《慢迭代》手记当时的原始配图。它表达了让我想继续做下去的那个世界；下面也会放出真实游戏画面。",[49,50],"youtube-embed",{"title":51,"videoId":52},"慢迭代：和 AI 打磨 Orbit Courier 的故事（英文旁白）","ac58DyAKOK4",[54,55,57],"h2",{"id":56},"一张图让我想继续做下去","一张图，让我想继续做下去",[10,59,60,61,67],{},"那时，我们已经有了一个可以接着做的游戏。九月底的一次博客项目里，Dot 做出了早期的 Orbit Courier：小车、浮岛、旋转障碍，以及收集三颗能量核心后返回珊瑚色火箭的任务。Dot 交付可下载的项目，Codex 在本地检查、录下自动演示。我在之前的 ",[25,62,66],{"href":63,"rel":64},"https://www.aaronguo.com/zh/blogs/your-dot-real-work",[65],"nofollow","OpenAI Dot：让它变得可以玩"," 中写过这个阶段。",[10,69,70],{},"我喜欢那辆小车，也喜欢它的材质。“慢迭代”让我开始想，可以怎样把它继续做下去。图片则把这个可能性变得特别具体。",[10,72,73],{},"我们围绕陶瓷、珊瑚色、香槟金、岩石、木头和玻璃，发展出一个晨光里的世界。我选了两张桥梁图片作为游戏的视觉参考。以后每做一轮，都能回来看：实现也许已经完成，但画面离想要的感觉，还有多远？",[10,75,76],{},[77,78],"img",{"alt":79,"src":80},"选定的晨光桥梁概念图：陶瓷小车、木桥和透亮的玻璃段","/blogs-img/2026-10-17-orbit-courier-02.webp",[10,82,83],{},[45,84,85],{},"我们用来确定视觉方向的一张晨光概念图。这是插画，并非游戏截图。",[10,87,88],{},"我想要的东西其实挺具体。小车要像一件能拿在手里的小物件，有一点亲切感。金属要接得住晨光，又不要变成一大片平涂的黄。浮岛要像这个世界的一部分，底下是岩石，上面是一条可以走的路。桥要让人想过去，又要留出足够的空隙，让“跨过去”这件事有点分量。",[10,90,91],{},"插画可以把这些感觉放进一个静止的画面。浏览器里的场景，却还得经得住不同角度、车辆移动和桥面变化。",[10,93,94],{},"10 月 7 日，我们给游戏建了独立的工作目录，保留原始源码包。它成了一件我想认真继续的事。没有必须赶上的期限，也不用下一步就铺开一整套关卡。一条路线，已经足够让我们花心思。",[54,96,98],{"id":97},"一句-go就再往前做一轮","一句 Go，就再往前做一轮",[10,100,101],{},"后来，节奏逐渐熟悉起来：看这一轮的结果，决定下一步在意什么，然后让 AI 继续。",[10,103,104],{},[14,105,106],{},"Go。",[10,108,109],{},"沿着这个方向，再改一轮，带回来一个我能检查的结果。",[10,111,112],{},"这些工作陆续跑了几十个小时。有时在改浮岛的形状，有时在调材质、反射，或桥后面的云。只看那一小段路线，很难想象它已经被反复打磨了这么多遍。",[10,114,115],{},[77,116],{"alt":117,"src":118},"独立项目早期，10 月 7 日真实运行的浏览器场景","/blogs-img/2026-10-17-orbit-courier-03.webp",[10,120,121],{},[45,122,123],{},"10 月 7 日的真实游戏画面。路线已经有了，岛体、材质和空气感还需要继续打磨。",[10,125,126],{},"早期场景很清楚地显示出它与图片的距离。主要物体都有了，但岩石折面很尖，表面比较简单。原料都在，还得让它们真正属于同一个世界。",[10,128,129],{},"我们改悬垂的岛体、香槟金边缘的厚度、陶瓷表面、木板切口和玻璃。光线要让小车确实坐在平台上，而不是悬在自己的倒影上。云要有纵深，又不能把场景吞掉。过程中也用到了现成的图形库和有授权的素材，并保留来源与署名。",[10,131,132],{},"有些变化，马上就能感觉到。有些则是一大段技术说明，换来画面上很小的一点区别。所以，保存真实截图很重要。我可以把新画面放到参考图旁边，判断我们有没有更接近那个想要的世界。",[10,134,135],{},[77,136],{"alt":137,"src":138},"10 月 8 日的真实游戏画面，岩石、陶瓷、金属与晨光继续调整","/blogs-img/2026-10-17-orbit-courier-04.webp",[10,140,141],{},[45,142,143],{},"10 月 8 日的游戏。两张开发画面的视角不同，用来观察变化，并非严格控制条件的图像比较。",[10,145,146],{},"过程中也有放弃和回退。一个方案做完了，不代表一定要留下。下一句 Go，可能是继续一个有希望的变化，也可能是退回上一版，再找一个更值得做的方向。",[10,148,149],{},"这就是我在手记里想象过的那种过程。一个兴趣，可以持续得到照顾。我可以在意一块岩石像不像真的、一束光是不是安静、小车从这个角度看是不是更好，然后再回来看看结果。图片一直摆在那里，指明想去的方向，也提醒我们实际画面还没有完全走到那里。",[54,151,153],{"id":152},"这个世界还得跑得起来","这个世界，还得跑得起来",[10,155,156],{},"画面打磨到一定程度，另一个问题就很难忽略了。",[10,158,159],{},"在一个较早的 Preview 里，我等一两分钟才进入场景，看到大约 17 FPS，游戏在窗口里还显得偏小。我喜欢这个世界，但进入它、在里面移动的体验，仍然需要改善。",[10,161,162],{},"云、反射和柔和阴影，都是气氛的一部分，也给浏览器带来了不少工作。画面看起来很安静，电脑却可能忙得很。",[10,164,165],{},"其实到了 10 月 9 日，我就已经决定先放下进一步的美术调整，把性能作为重点。这个阶段有有效的改进，也有绕路。有一次阴影缓存实验，因为我反馈机器严重卡顿、连 Codex 都受到影响而被撤回。我们没有确定那次问题唯一的硬件原因，先恢复之前的版本，处理游戏怎样使用资源。",[10,167,168],{},"其中一个特别实际的改变，是暂停。原来模拟停了，渲染器却可能还在继续画。小车不动，电脑没有跟着休息。加入渲染休眠后，停止的场景可以保留最后一帧，只在需要时重画。离开标签页，游戏也应该休息。",[10,170,171],{},"性能验证开始更在意短时检查、资源归属和清理。有的想法通过了真实浏览器中的比较，有的到了后面的检查就被放弃。通过路线、掉落、恢复、重试，都用有限时间的自动操作来验证。一个看起来有希望的数字，还得经得住其他检查。",[10,173,174],{},"后来，我也允许在更轻的可玩版本里，适度减少云、背景和光影细节。这是对发布体验作出的选择：场景的气质值得保留，玩家也得能进去、能移动。",[10,176,177],{},"这一阶段的数据，不能拼成一张干净的优化前后对比图。不同窗口、启动状态和测试路径，测到的含义并不一样。更有用的变化，是我们的注意力转向了真正打开它的人。",[54,179,181],{"id":180},"小车的操作也要对劲","小车的操作，也要对劲",[10,183,184],{},"有了具体的可玩版本，接下来的要求反而更容易说清楚。",[10,186,187],{},"A、D 转动车头；W 朝车头方向走；S 倒车。我希望车身的朝向是有意义的，而观察四周是一件独立的事。",[10,189,190],{},"游戏也应该铺满窗口。显示可以跟着窗口展开，底层实际绘制的像素尺寸仍然有上限，不必因为屏幕变大，就自动增加渲染负担。",[10,192,193],{},[77,194],{"alt":195,"src":196},"本地真实浏览器检查中的 Morning Crossing，画面铺满窗口","/blogs-img/2026-10-17-orbit-courier-05.webp",[10,198,199],{},[45,200,201],{},"本地检查时的真实游戏。可见的 Start 按钮和一秒保护提示属于诊断界面；后来的普通界面直接响应新的驾驶按键。",[10,203,204],{},"界面变得安静了一点。场景准备好，关闭首次指引后，按下一个新的驾驶按键，就能开始。拖动鼠标或使用方向键观察，按 C 重置视角。空闲和切到后台时，游戏仍然休眠。",[10,206,207],{},"这个阶段的满足感和之前不太一样。我们已经花了很多时间看这辆小车。现在，选择开始围绕怎样接过它的控制：认清车头，看清路线，过去，没走好就掉下去，再试一次。",[10,209,210],{},"进入游戏前的呈现也整理了。加载页用品牌图片，进度跟着实际准备状态走。等得较久时，有一个安静的恢复选项。操作指引放在游戏里，由浏览器记住是否关闭过，也可以从菜单重新打开。",[10,212,213],{},"这些呈现改进，不等于底层加载已经更快。它们让等待和接下来该做什么更容易理解。一个新玩家，不应该先了解整个开发过程，才知道怎样开始。",[54,215,217],{"id":216},"名字行星还有一扇正式的门","名字、行星，还有一扇正式的门",[10,219,220],{},"Morning Crossing 逐渐成形后，我希望它的身份能表达：这是一款我想继续做的游戏。",[10,222,223],{},"“跨越”成了贯穿它的线索。第一条路线只是开始，以后每一次跨越，我希望都有不同的地方、逐渐增加的挑战。这个世界的温暖，以及路线的清晰，应该能一直认得出来。",[10,225,226],{},"品牌图片帮助我把这种想法表达出来。我接受了六张小车和世界的图片，选第一张小车图作为主图。",[10,228,229],{},[77,230],{"alt":231,"src":232},"选定的 Orbit Courier 产品主图，陶瓷小车停在香槟金平台上","/blogs-img/2026-10-17-orbit-courier-06.webp",[10,234,235],{},[45,236,237],{},"正式选定的产品主图。它表达游戏的气质，并非实机画面，也不代表额外关卡已经完成。",[10,239,240],{},"Logo 也有自己的迭代。我喜欢轨道的概念，希望它带着游戏里的材质：行星、环和卫星，用陶瓷、香槟金和珊瑚色做出立体感。最后选中了第三款材质方案 Floating World Planet。名字旁边，也有了一个属于它的小世界。",[10,242,243],{},"然后是正式官网。我选了 Night Beacon 的方向，用深蓝围住温暖的场景，配珊瑚色按钮。我们把它做成铺满首屏的主视觉、Morning Crossing 的介绍、表达更大世界的图片，以及页面底部再一次开始游戏的邀请。",[10,245,246],{},[77,247],{"alt":248,"src":249},"正式发布的 Orbit Courier 官网，展示选定 Logo 和 Morning Crossing 入口","/blogs-img/2026-10-17-orbit-courier-07.webp",[10,251,252],{},[45,253,254],{},"真实的已发布网站。世界插画负责气氛，文字、导航和按钮是真正的网页元素。游戏在独立的玩家页面加载。",[10,256,257],{},"之前的博客案例已经做过本地网站。这一次，是给我准备正式发布的独立游戏做入口。页脚写着我的名字 Aaron Guo。",[10,259,260],{},"这扇门后面，也有实际的收尾：检查打包范围，修复过期测试，让构建可以复现，连接私有仓库，核对公开域名提供的确实是已提交的 main 版本。游戏终于到了别人也能打开的地方。",[54,262,264],{"id":263},"第一次跨越是一个开始","第一次跨越，是一个开始",[10,266,267],{},"10 月 17 日首次发布时，Morning Crossing 是第一条可玩路线。下方的 10 月 18 日更新，把它扩展成了三关。在桌面 Chrome 里用键盘体验，不需要账号。",[10,269,270],{},"写那篇手记时，我想象自己像写小说一样，时不时回到这个小世界。后来，这个比喻变得具体了：有一辆小车、一座桥、一个想去的地方，也有一连串决定，塑造了它今天的样子和操作。",[10,272,273],{},"我喜欢 AI 给这种项目留出的空间。我可以在意一块材质的光泽、一座小岛的形状，把喜欢的图片摆在旁边，再说一句 Go，回来看看哪里变了。遇到新问题，也可以继续守着同一个游戏，把它往前做。",[10,275,276],{},"正式上线，是我和这个世界之间又向前的一步。当初想走进那张图，现在已经有了第一次可以尝试的跨越，也有了回来翻开下一页的理由。",[10,278,279,284,285],{},[25,280,283],{"href":281,"rel":282},"https://orbit-courier-playtest.vercel.app/",[65],"体验 Morning Crossing"," · ",[25,286,288],{"href":287},"/zh/build","看看我的 Builds",[54,290,292],{"id":291},"_10-月-18-日更新三次跨越继续往上走","10 月 18 日更新：三次跨越，继续往上走",[10,294,295],{},"第一条路线现在接上了一段小旅程。完成 Morning Crossing，会解锁 Sundial Crossing；再完成第二关，才能进入 Skywheel Ascent。可以在 Crossings 菜单里重玩已解锁的路线，进度保存在当前浏览器里，不需要账号。",[297,298,300],"h3",{"id":299},"_01-morning-crossing","01 · Morning Crossing",[10,302,303],{},"原来的晨光路线仍然是起点：浮岛、木板和变化的玻璃桥。在这里熟悉小车的转向、跳跃，以及等待合适时机的感觉。",[10,305,306],{},[77,307],{"alt":308,"src":309},"Morning Crossing 实际游戏画面：陶瓷小车和连接晨光浮岛的木桥","/blogs-img/2026-10-18-orbit-courier-morning.webp",[297,311,313],{"id":312},"_02-sundial-crossing","02 · Sundial Crossing",[10,315,316],{},"第二关增加了摆动幅度更大的桥、旋转的铜色扫杆，以及两块独立变化的桥板。中间的落脚点和检查点，让下一次起跳前有机会重新调整。",[10,318,319],{},[77,320],{"alt":321,"src":322},"Sundial Crossing 实际游戏画面：小车前方是铜色旋转扫杆和变化的桥板","/blogs-img/2026-10-18-orbit-courier-sundial.webp",[297,324,326],{"id":325},"_03-skywheel-ascent","03 · Skywheel Ascent",[10,328,329],{},"第三关开始向高处走。摩天轮带着保持水平的平台升降，小车可以跳上去，随着它到达上层落脚点，再跨过空中的阶梯，抵达更高的信标。",[10,331,332],{},[77,333],{"alt":334,"src":335},"Skywheel Ascent 实际游戏画面：摩天轮平台把小车带向上层浮岛和空中阶梯","/blogs-img/2026-10-18-orbit-courier-skywheel.webp",[10,337,338],{},[45,339,340],{},"这三张是本地浏览器中暂停后的真实游戏截图，裁去了诊断界面。前文的概念插画仍然是视觉参考。各截图的相机取景不同。",[10,342,343],{},"游戏也加入了温暖、轻盈的环境音乐，以及跟着驾驶、跳跃、落地和道路变化触发的声音。挑战在增加，我仍然希望这个世界的气氛是安静的。",[10,345,346],{},"还有一些小瑕疵。试玩时，有些跳跃看起来已经落稳，小车却掉了下去。让视觉上的表面和小车的碰撞支撑更一致，是接下来要调研的问题。这次发布也不代表已经验证了广泛设备兼容性，或普通电脑上的持续性能。",[10,348,349],{},[25,350,353],{"href":351,"rel":352},"https://orbit-courier-playtest.vercel.app/play.html",[65],"开始三关旅程",{"title":355,"searchDepth":356,"depth":356,"links":357},"",2,[358,359,360,361,362,363,364],{"id":56,"depth":356,"text":57},{"id":97,"depth":356,"text":98},{"id":152,"depth":356,"text":153},{"id":180,"depth":356,"text":181},{"id":216,"depth":356,"text":217},{"id":263,"depth":356,"text":264},{"id":291,"depth":356,"text":292,"children":365},[366,368,369],{"id":299,"depth":367,"text":300},3,{"id":312,"depth":367,"text":313},{"id":325,"depth":367,"text":326},"AI 教会我“慢迭代”，一张漂亮的图片又让我想把游戏继续做下去。从一次次 Go，到画面、性能、操作和官网，这是 Orbit Courier 的故事。","md",{"date":373,"image":374,"alt":375,"category":376,"tags":377,"published":381,"draft":382,"youtube":383},"17th Oct 2026","/blogs-img/2026-10-17-orbit-courier-slow-iteration-cover.webp","《慢迭代》手记的原始插画：陶瓷小车、浮空岛和逐段延伸的木桥。这是概念插画，并非实机画面。","creation-media",[378,379,16,380],"游戏开发","AI编程","浏览器游戏",true,false,"https://youtu.be/ac58DyAKOK4","/blogs/zh/building-orbit-courier",{"title":5,"description":370},"blogs/zh/39.building-orbit-courier","sBrCPqUC7NqKSPkz3IbLoiZVk5Qst4LqJQB29cHWurE",1792358836636]