大家好! 👋
我是一名 Web 开发者,正在设计一个复杂的经济模拟游戏,基于文本和网格。 在我写第一行代码之前,我很想得到大家的架构建议,特别是关于性能瓶颈和艺术/UI 管道的指引。
(如果你感兴趣的话,可以阅读游戏概念的全文帖子 这里)
项目背景
- 视觉效果: 时尚的、定制的 "赛博朋克 SaaS"仪表板 UI(零 3D)。 它将显示高密度列表、实时股价图表、公司报告、2D蓝图样式的方案网格和风格化的 2D 资产(如政治肖像和派系图标)。
- 目标平台: PC/桌面 (Steam)。
- 核心循环: 一种连续的、基于 tick 的模拟。在后台,引擎需要处理:
- 实时股价和商品市场(计算供应和需求曲线和波动周期)。
- 基于距离的物流计算(曼哈顿距离、送货旅行时间和正在途中的资源队列)。
- HR 旅费计算(每个建筑根据分配的员工居住地计算工资和交通费)。
- 6-9 个竞争对手 AI 公司的决策脚本(每个公司有不同的难度)。
- 全球交易量跟踪器,监测所有市场交易。
我的提议堆栈
- 前端: Angular + Tailwind CSS + ECharts 或 Chart.js(用于高密度股价图表和 UI)。
- 重型客户端包装器: Electron(或 Tauri)以桌面应用程序的形式编译它,并集成 Steam API(使用
steamworks.js或 Greenworks)。 - 核心模拟引擎: Node.js / TypeScript。
问题:Node.js 性能 vs. 本机 Rust/C++
由于 JS/Node.js 是单线程的,我担心在每个游戏 tick 运行数千个数学计算、路径寻找节点和状态更新会迅速堵塞主进程,导致 UI 滞后、抖动图表和模拟速度慢。
我正在权衡三种结构路径,并希望得到大家的意见:
- 纯 JS/TS 与 Worker 线程: 在 Node/TS 中保留所有内容,但将整个模拟循环转移到一个 Worker 线程池中,保持主进程仅用于 Angular 的 UI 渲染和图表更新。
- 本机 C++ 或 Rust 核心(via Node Addons): 保持 Angular/Electron 为前端,但在本机 Rust(使用 Neon)或 C++(使用
node-addon-api)中编写重型模拟引擎(AI、经济、物流队列)。 然后将其编译为本机二进制并将其直接绑定到 Node.js 运行时。 - Tauri + 本机 Rust 后端: 将 Electron 替换为 Tauri,使用本机 Rust 进行后端逻辑和模拟循环,并保留 Angular 为前端。
我对 C++/Rust 的担忧: 如果我采用本机 C++ 或 Rust 路线,性能增益是否会被序列化和反序列化开销(穿越 JS/本机边界)所吞没,尤其是在每个 tick 将大状态更新(数千个资源数组、价格和位置)传递给 Angular 时? 或是 IPC/Addon 桥已经成熟到足以在不杀死帧率的情况下处理这一切?
我的弱点:2D 艺术和 UI 资产管道
除了代码之外,我面临着一个巨大的障碍:
- 我对 2D 图形设计、矢量艺术或数字绘画完全缺乏技能和经验。
- 我没有视觉天赋,无法自己制作高质量的图标或肖像。
- 尽管我对高保真度 UI 视觉风格非常喜欢,但我 不想自己设计或绘制视觉资产。
如果你曾经像一个 solo 程序员一样面临过这个情况:
- 你如何学习游戏 UI/UX 设计的基本知识(布局、对比、层次结构)?当你是一个纯编码者时,你如何做到这一点?
- 有哪些伟大的资源、资产包或 UI 套件适合高密度、科幻/企业级 Web 接口?
- 你如何成功地在一个没有巨大预算的开源、学生领导项目中找到和招募 2D UI 艺术家来与你合作?
感谢大家的架构和视觉设计智慧!
(P.S. 我用 AI 写了我想说的话,因为它比我自己写的要更容易理解,但我会回应所有你的评论!)
评论 (0)