嘿,同行开发者, 👋 我是一位独立开发者,正在使用 Cluade AI Assistance开发一个叫做 MOKSHA 的浏览器游戏,一个基于 karma 哲学和 Sanatan Shastras 的 HTML5 游戏。 我正在使用纯粹的 Vanilla JavaScript 和 HTML5 Canvas(没有过载的引擎,只有原始代码)来构建它。 我目前正在进行一个大规模的重构,以使我的代码库干净、模块化和锁定在稳定的 60fps 上。 ✅ 到目前为止完成的内容: 我成功地将之前的单个文件设置模块化: * 把所有音频逻辑提取到 src/audio.js(使用 IIFE 模式暴露一个全局的 window.AudioManager)。 * 将所有 Canvas 2D 渲染和视觉动画移到一个 ES6 模块 src/render.js 中,暴露一个 Renderer.drawScene(state) 函数。 * 完全地外部化 style.css。 🚧 最终阶段(我需要一个理智检查!): 现在,我正在从 index.html 中提取剩余的核心游戏逻辑到一个专门的 ES6 模块 src/engine.js 中。这个 KarmaEngine 将处理: 1. 核心物理、对象池(mayaPool、particlePool)和状态计算。 2. 游戏状态转换规则(Moksha、重生、Pralaya 条件)。 最后,我打算使用 src/main.js 作为调度器(“胶水”)来顺利地将 KarmaEngine、Renderer 和 AudioManager 绑定在一起。 ❓ 我的问题给经验丰富的开发者: 1. 依赖注入: 以避免循环依赖,我打算将一个 callbacks 对象传递给引擎的 init() 函数,让它可以触发音频和 UI 更新,而不直接引用 DOM 或音频模块。 这是最干净的 Vanilla JS 模式吗?还是您建议使用事件发射器方法? 2. 主线程瓶颈: 我最近解决了一个 439ms 提交时间问题,因为 UI 更新的嵌套 requestAnimationFrame 调用。 我现在将引擎从 UI 分离,使用一个基于状态的系统,其中一个受限的循环每帧同步变量到 DOM。 当从 engine.js 将 renderState 对象传递给 render.js 时,我应该注意到什么陷阱?
Moksha (Vanilla JS 游戏) 更新: 将代码重构为模块(audio.js,render.js,style.css) + 需要快速检查是否将 engine.js 和 main.js 外部化!
评论 (0)