惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

szhshp 的第三边境研究所

假设, AI 把我代替的那一刻真的到来 | szhshp 的第三边境研究所 小傻瓜都能懂的 AstrBot QQ 机器人集成 MCP 功能实战指南 | szhshp 的第三边境研究所 《智人之上: 从石器时代到 AI 时代的信息网络简史》阅读笔记 | szhshp 的第三边境研究所 iPadOS 26 无法设置空间场景图片壁纸的解决方法 | szhshp 的第三边境研究所 《一路云海》(终) | szhshp 的第三边境研究所 《一路云海》(四): 如何不按套路旅行 | szhshp 的第三边境研究所 《一路云海》(三): In Ya Mellow Tone | szhshp 的第三边境研究所 《一路云海》(二): 关西世博参观纪实 | szhshp 的第三边境研究所 《一路云海》(一): 新的征程 | szhshp 的第三边境研究所 2025 大阪世博会 [ 3 天前-先到先得 ] 阶段 场馆预约必中独家攻略 | szhshp 的第三边境研究所 Hackathon 随想 | szhshp 的第三边境研究所 一杯双皮奶 | szhshp 的第三边境研究所 Armbian + CasaOS + NAS 配置指南 | szhshp 的第三边境研究所 Docker 构建镜像报错: error getting credentials - err: exit status 1, out: `` | szhshp 的第三边境研究所 Disqus RIP! 论过高的维护成本如何治疗固执的坏习惯 | szhshp 的第三边境研究所 炸弹猫桌游变体规则 | szhshp 的第三边境研究所 《小岛经济学》阅读笔记 | szhshp 的第三边境研究所 《金钱心理学》阅读笔记 | szhshp 的第三边境研究所 为知笔记 RIP: 迁移剩余的笔记 | szhshp 的第三边境研究所 2025 博客第十年展望 - 再见我的过去 | szhshp 的第三边境研究所 我在独立游戏里面致敬的作品 | szhshp 的第三边境研究所 《How to make thing faster》阅读笔记 | szhshp 的第三边境研究所 《The Art of Clean Code》阅读笔记 | szhshp 的第三边境研究所 《Clean Architecture: A Craftsman Guide to Software Structure and Design》阅读笔记 | szhshp 的第三边境研究所 《How AI Works》阅读笔记 | szhshp 的第三边境研究所 游戏策划废案 - Project Uranus | szhshp 的第三边境研究所 游戏策划废案 - Project X | szhshp 的第三边境研究所 Trap of Life | szhshp 的第三边境研究所 如果我用手搓了个暗物质雏形 | szhshp 的第三边境研究所 《Rust Programming Language》- EX - Cheatsheet | szhshp 的第三边境研究所 新的播放器上线了 | szhshp 的第三边境研究所 Cypress - End-to-End Testing: OKTA Authentication with MFA | szhshp 的第三边境研究所 VSC x VIM - 反正多学几个快捷键没有坏处 | szhshp 的第三边境研究所 两小时 Docker 速成 - Getting Started | szhshp 的第三边境研究所 《The Joy of Javascript》- 5 - Data | szhshp 的第三边境研究所 《The Joy of Javascript》- 4 - Meta Programming | szhshp 的第三边境研究所 《The Joy of Javascript》- 3 - ADT(Algebraic Data Type) | szhshp 的第三边境研究所 Web-Automation Testing | szhshp 的第三边境研究所 《The Joy of Javascript》- 2 - Functor/Monad | szhshp 的第三边境研究所 《The Joy of Javascript》- 1 - Object/Function | szhshp 的第三边境研究所 EvalError: Possible side-effect in debug-evaluate | szhshp 的第三边境研究所 前端 QA 工具链指南 - husky,commitlint,commitizen,eslint,typescript,express | szhshp 的第三边境研究所 效率工具 & 软件推荐 | szhshp 的第三边境研究所 站点开源 Project Titan | szhshp 的第三边境研究所 cmd/powershell-命令速查-Cheatsheet | szhshp 的第三边境研究所 Git-命令速查与相关问题解决-Cheatsheet & Troubleshooting | szhshp 的第三边境研究所 Tailwind.css not included in NextJS Production | szhshp 的第三边境研究所 Github GraphQL API - Data Integration | szhshp 的第三边境研究所 尝试 Windows Terminal + z.lua | szhshp 的第三边境研究所 StrokePlus.net - Powerful Hotkey Boost | szhshp 的第三边境研究所 优雅地 Hack 一台黑苹果 | szhshp 的第三边境研究所 一杯关东煮 | szhshp 的第三边境研究所 Gitee x PicGo 管理图床 | szhshp 的第三边境研究所 Create Your Own Redux (Typescript) | szhshp 的第三边境研究所 Getting Started: Ionic + Capacitor + React + Typescript + Android | szhshp 的第三边境研究所 GraphQL: File Upload & Troubleshooting | szhshp 的第三边境研究所 吉祥航空随心飞刷票工具循环查票工具 | szhshp 的第三边境研究所 NVM Windows Portable Installation | szhshp 的第三边境研究所 NextJS x Typescript - Integration & Troubleshooting | szhshp 的第三边境研究所 全站点升级 - Project Titan | szhshp 的第三边境研究所 AWS-EC2-常见问题解决-Troubleshooting | szhshp 的第三边境研究所 Workbox-Getting Started | szhshp 的第三边境研究所 《时间简史》阅读笔记 | szhshp 的第三边境研究所 《时间的秩序》阅读笔记 | szhshp 的第三边境研究所 ESLint-常见问题解决-Troubleshooting | szhshp 的第三边境研究所 站点索引 | szhshp 的第三边境研究所 个人知识库搭建 - Hexo 实现 Github/Coding 持续集成 | szhshp 的第三边境研究所 BMOB-常见问题解决-Troubleshooting | szhshp 的第三边境研究所 React + Typescript: 开启 HMR/Hot Loader | szhshp 的第三边境研究所 Yarn & NPM | szhshp 的第三边境研究所 ESLint: Typescript + React + TSX 集成 | szhshp 的第三边境研究所 《10101》EP15:过年 2020 | szhshp 的第三边境研究所 Cmder-Usage | szhshp 的第三边境研究所 Redux-DOM not refreshed | szhshp 的第三边境研究所 React Semantic UI-CheatSheet | szhshp 的第三边境研究所 Typescript: Getting Started | szhshp 的第三边境研究所 Flutter-Getting Started | szhshp 的第三边境研究所 Typescript: Access window object with type check | szhshp 的第三边境研究所 VSC Extension Development-Create A Code Formatter Extension | szhshp 的第三边境研究所 OneNote Extension-Main API | szhshp 的第三边境研究所 TortoiseGit Win10 Icon not showing correctly | szhshp 的第三边境研究所 Mongoose: aggregate() 方法实现聚合函数 | szhshp 的第三边境研究所 React In Depth - React 源码解析 - render() & Fiber | szhshp 的第三边境研究所 MongoDB x Mongoose: 实现类似 Join 的功能 | szhshp 的第三边境研究所 Disqus 评论框改造工程-实现 Disqus 代理的 Serverless 服务 | szhshp 的第三边境研究所 GUI, CLI, Terminal, Shell, TTY, Console, Bash | szhshp 的第三边境研究所 Jest Async Best Practise: No Nested Async | szhshp 的第三边境研究所 关系型数据库与非关系型数据库优缺点分析 | szhshp 的第三边境研究所 New Edge & Chromium Error - Package is invalid: 'CRX_VERSION_NUMBER_INVALID' | szhshp 的第三边境研究所 选择 GraphQL 的 N 个理由 | szhshp 的第三边境研究所 StrokePlus - 鼠标手势神器的代码编写技巧 | szhshp 的第三边境研究所 嗨,好久不见 | szhshp 的第三边境研究所 Vue + ElementUI 集成 Vue Router | szhshp 的第三边境研究所 IE8 - Unknown Runtime Error Using innerHTML & Ajax | szhshp 的第三边境研究所 React: Handling Events | szhshp 的第三边境研究所 React-Navigation Integration with Redux | szhshp 的第三边境研究所 React: States is tricky | szhshp 的第三边境研究所 《10101》EP14:小剧场 | szhshp 的第三边境研究所 ColdFusion - Basic - arguments in cffunction | szhshp 的第三边境研究所 ColdFusion - Basic - cfset | szhshp 的第三边境研究所
人生第一款独立游戏开发复盘 | szhshp 的第三边境研究所
2024-08-12 · via szhshp 的第三边境研究所

Meta

目录

Intro

靠现在不写 Tech Post, 一年可能才一篇文章…

写这篇文章前我顺便花了两周把网站总体升级了, 新的 Server Component 的应用对整体网站体验提升特别大, 虽然从 客户端渲染 逐渐转回到 服务端渲染 有一些回归十多年前 PHP 和 JSP 的感觉, 但是现在设备和网络环境已经完全不同, 因此为了体验新技术, 我把整个网站重构了一次.

是的网站什么变化都没有, 只是所有页面可以 1s 瞬间加载了

Game Starts Here

没错, 我花了一年, 一个人写了一个完整的独立游戏.

这是我这辈子代码量贡献最大的一个项目. 甚至比一些公司的项目还要大.

这是我第一个公开发布的独立游戏. 但并不是我制作的第一个游戏.

我曾在高二使用 RPG Maker 制作过一个游戏, 这个游戏还是还是用我初三时候写的一个小说的世界观, 当初我还发布到了起点中文.

但是小说也没写完, 游戏也烂尾了.

在大一使用 C 写了个很华丽的俄罗斯方块, 现在我还存着源码.

大二用 JAVA 写了个 Android 版 SheepFrenzy, 大概就是羊驼接住掉落的食物的游戏, 借鉴了 Doodle Jump, 速度会越来越快且有各种奇怪道具, 当年发布到了安卓市场, 广告收入都没超过 10 块钱.

工作后尝试使用 Game Maker Studio 制作游戏, 当初有很多的困难, 因此也是半路而废.

然后游戏开发的经历停滞了很多年.

一切的开始

  • 2022 年 11 月, 看到行业的一些发展方向, 开始学习 Rust
  • 2023 年 1 月, 尝试使用 rustlings 学习 Rust
  • 2 月, 研究了一下 2D 渲染库, 花了 30 分钟搓出了一个贪吃蛇并成功使用 wasm 打包到浏览器运行
  • 3 月, 写出游戏第一版 POC, 改版了两三次, 最终确定了基本框架
  • 4 月, 三次迭代后制作了一个 Stage 0
  • 6 月, 自行立项, 为此我特地吃了个自热火锅庆祝, 购买 Steam 坑位, 花了钱了这下会逼着自己做完了
  • 7 月, 开始开发, 准备音乐花了大概一个月, 最终选定了前 4 关一共 12 首音乐
  • 大约花了一个半月时间完成了 Stage 1
  • 10 月, 完成了 Stage 2 , 同期确定了后面的关卡设计以及音乐
  • 12 月, 完成了 Stage 3 , 真的是累人
  • 2024 年 2 月, 完成 Stage 4 , 4 月 完成 Stage 5 , 5 月 完成 Stage 6
  • 5 月, 测试, 修复 bug, 优化, 翻译
  • 2024 年 6 月, 正式发布

这些应该从一开始就计划好的

  • 大约制作到 Stage 4 的时候, 我发觉敌人精灵的战斗逻辑太过复杂, 于是从 Stage 1 开始重构
    • 花了半个月, 将移动和子弹逻辑分离
    • 然后将不同的子弹逻辑也解耦出来, 方便不同关卡复用
    • 同期我发觉音乐时间点的逻辑也有问题, 于是花了十几天重构
  • 大约做到 Stage 4 的时候, 我发觉需要添加一个难度选项
    • 于是我就想: “干脆多做几个难度”, 加一个难度系统
    • 于是又从 Stage 1 开始重构
  • 最终 release 前, steam 审核员提醒我说我之前游戏介绍说支持英文, 于是我又花了一周时间翻译了所有的文本
  • 无数次推翻初步设计, 从第一关重构
    • 如果制作到了第 6 关, 突然发现第 1 关的设计有问题, 那么我就得把所有关卡所有场景代码都改一次
    • 虽然都是小修改, 但是次数多了也很麻烦
    • 最无奈的是, 这样的需求变更是我自己提出来的, 也没有实习生来帮我改啊

AI 是万能的?

  • 图片和音乐有很大一部分由 AI 生成
    • 无论我写多么详细的 Prompt, 最终生成的图片大多都不符合预期
  • 一千多张图片里面只有三到五张符合我期待的风格
    • 最终游戏中所有的图片都有我后期 PS 处理的痕迹, 以前画漫画的时候我就是用 PS 鼠绘, 因为有设计的爱好因此对很多 PS 工具都有所了解
    • 特别是对于游戏角色素材, 有一部分我依然需要自己用 PS 修饰出我期待的图
  • 音乐使用伪 AI 生成, 实际上是一些固定片段的叠加和排列, 因此有部分乐曲会感觉重复度很高
    • 我可以自由调整片段长短层次及顺序, 因此生成的乐曲多数我还满意
    • 当然, 同样的, 最终游戏中所有的音乐都有我后期 Au 处理的痕迹
    • 因为可以根据需求进行调整, 我按照一些固定的乐曲情绪排列, 比如 12-123 , 123-23-234 或者 12-123-1234-234 等多数大众乐曲的编排顺序, 组合出了我期待的音乐
    • 最终还是搓出了约 24 首音乐, 版权要求我不能二次出售只能用于媒体配乐, 花了我大概 400 元
  • 我不得不赞叹一下一些作曲人的才华, 例如它们设计一些 日常场景的音乐 是按照 12-345-345-345-345 无限循环 的流程设计的.
    • 我很好奇这是如何做到的, 如果是单纯一个音频文件如何做到无限循环
    • 如果是 12345 分割开似乎可以, 但是很神奇的是, 12-345-345-345-345 无限循环 可以在任何时候自然中断并无缝衔接一段新的 12-345-345-345-345 无限循环
    • 要做到这一点, 还需要考虑到 345 的结尾和 12 的自然过度
    • 对此我在游戏素材里面做了一些模仿, 不过是比较生硬的 345 循环, 听感上差不多但是其实是不同的方案
  • 关于文字翻译
    • 1K 多个句子和短语, 就算有 AI 翻译, 光审核也把我累的半死
    • AI 完全不懂语境和语气, 有些句子翻译的太生硬了, 我还得手动修改
    • 到底是谁在那里吹 AI 会直接代替人类翻译的呢?

AI 素材的反思

  • 打死我也不相信画师和作曲会失业, 但是根据现在的情况看, 初级的素材生成确实可以用 AI 代替
  • 我相信未来的 AI 会越来越强大, 应该可以生成出更多更好的素材
  • 但是如果是下一部作品, 我希望和画师和作曲人合作, 我觉得还是需要专业的人来制作风格统一的素材, 或者说, 我希望可以对更细节的部分进行定制

一个美食家并不是定是个好厨师

  • 硬核玩家并不一定是一个好的游戏设计师
    • 游戏确实是我生命重要的一部分, 但是当我来设计的时候, 逐渐就陷入了自己特定的思维定式
  • 我很惊奇地发现, 我对 Stage 4 Boss Battle 里面血条动画的设计和 塞尔达传说王国之泪 最终 Boss 战斗有一样的地方
    • Boss 战斗到了某个阶段都突然加血并让血条穿出屏幕
    • 但是很无奈, 王国之泪发布在 5 月, 我的游戏发布在 6 月, 玩家会认为我抄袭了, 但是这真的是灵感碰撞到了同一个地方
  • 难度设计的问题
    • 只狼 的二周目一定比一周目更简单
    • 我每一个关卡会调试上千次, 因此我可以记下每一个关卡的每一个敌人的位置
    • 退款的 Comments 基本都是说难度太高
    • 但是这还是我降低了两个 Level 的难度后的结果
    • 简单难度我都准备加上 隔壁奶奶都能玩 的提示了

市场的反思

游戏有很多类型, 而我一开始选择的是 STG, 但是逐渐设计成了 轻STG + 重MUG 的结合

混合类型的作品面向的市场和直接面向 STG 或者 MUG 的市场不同, 但是我并没有意识到这一点

而且我不应该和 Steam 官方夏促放到同一天启动, 也许当初推迟半个月或者一个月再发布会更好

推广和预热都很重要, 我深知这部分的重要性, 如果有个帮手可能会好很多

ROI 的反思

  • 我花了大概 2000 元的成本 + 无数的业余时间
  • 但是我对于这样的 ROI 并不满意, 我觉得应该修改一下投入资源的方式.
  • 其他还有很多支出
    • 立项开始我使用的是 Windows 电脑, 但是在开发到 Stage 3 的时候, 我发现四年前的电脑已经跑不动了, 我又不能用公司的 MBP 2019 来 Push 个人项目, 于是我购买了一台顶配的 Mac Mini M2
      • 额外 16G 内存花了我 3000, 总价可以买两台 Windows 笔记本了, 我的钱包在滴血…
  • Copilot 每月 10 刀
    • 一开始我还在用公共账户, 就那种教育认证的便宜的账户, 期间因为各种认证中断等问题, 我折腾了很久
    • 后来公司也开始推行 Copilot, 很无奈 Enterprise 账户需要证书才能登录, 所以不能在个人设备上使用
    • 后来我真的觉得麻烦了, TMD 60 块钱都不够我一天的饭钱, 于是我开始按年订阅
    • Copilot 大概总计 900 左右的支出
  • 我也不知道是否应该把这段支出算到成本里面, 但是这一套软硬件更新给了我四到五倍的效率提升

有些时候我在想, 如果没有这些让我提升效率的加成, 这个游戏真的可以按时完成吗?

项目推进的反思

上半年在亚马逊乱翻行业书籍, 找到一本 《How to make things faster》

我一看 23 美元, 立马 下单购买 下载了盗版

这书并不是一本很好的书, 基本都在说一堆开发的大道理, 也许适合初学者入门阅读? 例子都是十几年二十几年前的.

但是 Chapter 104 里面一句话让我印象深刻:

“You’ll do yourself a favor by killing a bad idea before it kills you. If you solve your worst problem, then find the next one. Iterate. Shorter iterations are better.”

我应该缩短开发时间到 6 个月以验证这个 Experimental Game 的可行性, 而不是花费一年的时间.

我应该提供试玩收集反馈, 而不是推行个人主义的设计风格.

我应该和更多更专业的人合作, 而不是自己一个人做.

我想, 游戏开发之路可能暂停一段时间吧

我花费了一年的时间, 实现了一个毫无意义的梦想.

我唯一觉得满意的是, 这款游戏的开发流程即使到了结尾, 我一直保持着对它的热情.

以前我就有一些项目, 到了结尾阶段开始希望其快速结束, 但是这一部作品从头到尾保持了一致的质量.

即使有人觉得太难, 有人觉得太粗糙.

但是我觉得这是我这一年来最好的作品.

但是, 我想…

独立游戏开发之路可能暂停一段时间吧…

呸!!!

我才不会停下来呢!

这年头, 我已经失败惯了, 无所谓

我开始设计下一个游戏了!

拜拜!