我是游戏宅基地的运营者,最早被 JavaScript 写游戏吸引,原因很现实:不用装环境、打开浏览器就能跑、改一行刷新就能看效果。后来做独立小游戏,JS 成了我的主力语言之一。这篇不是教程罗列,而是把我踩过的坑和真正用得上的路线摊开讲。

为什么独立开发者适合用 JS 做游戏

  • 生态大、招人/查资料容易,几乎所有问题都能搜到答案。
  • 跨平台:同一份代码能跑在网页、iOS、Android、微信小游戏、抖音小游戏上。
  • 热更新友好,改完逻辑刷新即生效,不用走商店审核。

但 JS 不是银弹。它的弱项是大型 3D 和重计算,遇到这种需求我会直接换引擎或换语言。

一个真实的开发案例(脱敏)

我曾用纯 JS + Canvas 写过一个 2D 像素地牢小游戏 demo。核心就是 game loop 加 requestAnimationFrame。最初我图省事用 setInterval 驱动逻辑,结果在掉帧的机器上出现“逻辑累积延迟”——怪物越走越快、碰撞判断错位。后来改成基于时间戳的 delta-time(每帧用当前时间减去上一帧时间算出 dt,再乘以速度),所有运动都乘以 dt,问题才彻底消失。地图用二维数组存 tile,碰撞用 AABB 矩形相交判断,角色用简单的状态机管“待机/移动/攻击/受伤”。这些细节教程很少提,但真实开发一个都绕不开。

引擎选型的判断(我的方法论)

我的做法和很多人相反:先用手写 Canvas 跑通一个最小闭环(角色能走、能碰撞、能死),再决定要不要换引擎。不要一上来就套 Phaser,否则你永远不懂游戏循环到底怎么转。

  • 纯手写 Canvas:适合理解原理、做超轻量小游戏(微信小游戏、活动页)。
  • Phaser 3:2D 首选,内置物理、tilemap、补间动画、资源加载,文档全。我 80% 的 2D 项目用 Phaser。
  • PixiJS:只做渲染、性能极致,适合弹幕/粒子,但物理和逻辑得自己拼。
  • Three.js / Babylon.js:3D 首选,学习曲线陡,不建议新手直接碰。

移动端性能坑(具体数字)

真机上踩过的:drawImage 调用过多会掉到 30fps 以下;散图一张张画远不如用纹理图集(atlas);频繁 new 对象会触发 GC 卡顿,必须用对象池;静态背景用离屏 canvas 缓存一次,别每帧重绘。把这几条做对,低端安卓也能稳在 50fps 以上。

发布渠道

小游戏验证想法,我优先发在游戏宅基地和 Itch.io,前者方便和国内独立开发者交流,后者能直接触达海外玩家,再视情况转微信/抖音小游戏。 游戏宅基地(bacc8.cn)是我一个人在写独立游戏的地方,这里持续记录真实的开发笔记和踩坑。欢迎来做游戏、聊游戏,也欢迎把你的 demo 发上来一起改。