《小游戏开发实战》卷二《引擎、实现与体验打磨》目录

《小游戏开发实战》卷二《引擎、实现与体验打磨》全书目录与阅读路径:16 章 48 节,覆盖引擎选型评分、工程骨架与构建管线、渲染适配、资源管线、游戏循环与状态机、输入交互、物理碰撞、存档反作弊、对象池内存、平台能力适配层、UI、动效、新手引导、性能优化、测试与工程化,每节都配可跑的 Python 仿真、TypeScript 内核或单文件 HTML 原型。

本轮修订与验证范围

2026-10-14 补齐 10.2 宿主对照输入和 11.2 弹窗测试,修正重复 DOM 标识;与卷一附录 A 的完整 pack.mjs 一起验证 Node 和浏览器脚本作用域。宿主是本地合成脚本,不代替真实平台登录/支付/广告/审核;全卷其他文件依赖仍需按阶段复核。

这是《小游戏开发实战》三卷本的第二卷。卷一回答了「做什么、给谁做、怎么算账」,这一卷回答「怎么把它做出来,并且做得手感对、跑得动」。它不讲 3D 渲染、不讲原生发行、不讲引擎 API,它讲的是在平台的包体、加载、内存与 API 约束下,一款小游戏的工程骨架、逻辑内核与体验打磨怎么落地,并且每一处都对应一个能跑出来的产物。

卷二《引擎、实现与体验打磨》回答三个问题:用什么引擎、工程怎么搭(第 1–4 章),逻辑内核怎么跑起来(第 5–10 章),体验与质量怎么打磨(第 11–16 章)。贯穿全书的仍是虚构的轻度小游戏 《合成小岛》(merge-island:合成 + 放置 + 关卡 + 装扮)与工具链 pebble(config/ + sim/ Python + core/ TypeScript + web/ 单文件 HTML)。卷一目录 给了市场与设计,卷三《上线变现与长线运营》接着把它推上线。

这套书与站内既有内容的分工

站内已经有不少相邻内容,写清楚分工比重复写一遍更有价值。这三处的边界是本卷最容易混淆的,务必分清:

  • 小游戏创作平台专题(game-engine) 共 24 篇,讲的是做小游戏创作平台——编辑器、素材市场、BP 与融资,是 SaaS 创业口径。本卷是「在平台上做一款游戏」,是单款产品的工程口径,两者不重叠。
  • 小程序小游戏开发综述 是一篇 96 行的单篇综述,覆盖引擎选型、性能、变现三块。本卷是成体系、可运行的 16 章,第 1 章给它一张逐项对照表。
  • 引擎内核系列 讲的是从零实现引擎内核(helio,TS + WebGPU:渲染管线、图元、着色器)。本卷的 core/ 只做「配置驱动逻辑 + 平台 API 抽象层 + mock 宿主 + 最小渲染抽象」,不碰渲染管线内核,也不写引擎 API 教程。
  • Cocos 游戏开发系列 是引擎 API 教程(Creator 组件、生命周期、渲染管线)。本卷不重复这些,只在选型章里横向引用。

一句话:本卷做的是「一款小游戏怎么被工程化地实现与打磨」,不是「做一个引擎」或「做一个平台」,也不是「某引擎 API 手册」。

明确不在本卷范围内

为了让边界清楚,下面这些这一卷不讲:

  • 3D 渲染与美术管线(模型、骨骼、shader、美术生产流程)。
  • Cocos / Godot / Defold 等引擎的 API 教程(站内已有专书)。
  • 服务端架构(房间服、匹配、跨服;站内已有《MMO 服务器开发》四卷本 )。
  • 做「小游戏平台 / 创作工具」本身(站内已有 game-engine 专题)。
  • 真实平台后台数据、真机帧率与审核结果(X,需真实业务环境,命令行不可复现)。

可运行性口径

本卷与卷一用同一套六档标注,代码块头部注释里写着它属于哪一档:

层含义怎么验证
S 仿真层Python 数值仿真:选型评分、分包预算、图集体积、引导漏斗、冷启动、帧预算/opt/homebrew/bin/python3 sim/<name>.py --config config/ --out out/,产出 JSON + CSV + SVG
P 内核层TypeScript 配置驱动逻辑内核 + 平台 API 抽象层 + mock 宿主node --test 'core/test/*.test.ts'
W 网页层单文件 HTML 可玩原型:同一份 core/ 逻辑内联进一个 HTML,浏览器打开就能玩NODE_PATH=/opt/homebrew/lib/node_modules node web/verify.mjs web/dist/index.html
D 静态层平台能力矩阵、包体预算表、兼容矩阵、数据表 schema、检查清单仅 schema / lint 校验
X 不可复现真实平台后台数据、真机帧率、真实审核结果正文每处显式标注「需真实业务环境,命令行不可复现」
B 基准选型评分稳定性、帧预算、内存漂移、手感容差产出 JSON,软告警不硬失败

本卷延续卷一的两条核心主张:一份 config,三种消费(Python 仿真、TS 内核、浏览器原型读同一份数字,故 config/ 里禁浮点、TS 侧幂运算用 BigInt、除法一律整数地板除);一份逻辑,两种宿主(逻辑只依赖 Host 抽象,mock 宿主与真机宿主逐帧一致,故 core/ 里禁用 Math.random(),随机数一律可播种)。两条纪律同样适用:不编造平台后台数字,所有仿真数字来自本机实跑、只作「同机相对量级」。

卷二结构总览(16 章)

章主题可运行性层级
1引擎与框架选型S + B
2工程骨架与构建管线P + S
3渲染与适配P + W
4资源与素材管线S + P
5游戏循环与状态机P(本卷核心)
6输入与交互实现P + W
7物理与碰撞P + S + W
8数据、存档与反作弊P + S
9对象池与内存管理P + S + B
10平台能力适配层P(本套核心主张)
11UI 系统与界面实现P + W + B
12动效与手感打磨P + W
13新手引导实现P + W + S
14性能优化S + B
15测试与质量保障P + W
16工程化与协作P + D

全书目录

前置

篇目核心内容
目录本页:定位、三处分工、可运行性口径与全书结构
附录 C:全书代码、配置与数据集索引pebble/ 全部文件索引、环境与六层复现命令

第一部分:引擎、工程与资源(第 1–4 章)

第 1 章 引擎与框架选型——本卷的 S + B 起点

节文章核心内容
1.1引擎格局与能力对比主流小游戏引擎的能力横向对比
1.2选型加权评分与敏感度可运行的加权评分与敏感度扫描(S+B)
1.3自研 vs 引擎的取舍自研内核与用引擎的边界与成本

第 2 章 工程骨架与构建管线——把工程搭起来

节文章核心内容
2.1项目结构与模块边界目录结构、模块边界与依赖方向
2.2分包与资源加载管线首包 / 分包划分与加载顺序(P+S)
2.3构建产物与包体预算构建产物清单与包体预算校验(S)

第 3 章 渲染与适配——在无 DOM 环境里画出来

节文章核心内容
3.1无 DOM 的 Canvas / WebGL 渲染环境小游戏没有 DOM,怎么建立渲染环境
3.2多分辨率与安全区适配不同分辨率、刘海屏与安全区适配
3.3渲染批处理与性能合批、状态切换与绘制调用控制

第 4 章 资源与素材管线——图、音、版本

节文章核心内容
4.1图集打包与纹理压缩图集打包与纹理压缩格式的体积账(S+P)
4.2音频格式与体积音频格式选择与体积控制
4.3资源热更新与版本管理资源热更新与版本一致性

第二部分:逻辑内核(第 5–10 章)

第 5 章 游戏循环与状态机——本卷核心

节文章核心内容
5.1固定步长循环与确定性固定步长、可播种随机与确定性回放(P)
5.2场景与游戏状态机场景切换与游戏状态机
5.3暂停、切后台与恢复暂停、切后台与时间跳变的恢复

第 6 章 输入与交互实现——把手指变成操作

节文章核心内容
6.1触控输入与手势抽象触控事件的抽象与手势识别(P+W)
6.2拖拽与滑动手感拖拽、滑动的手感参数与调参(W)
6.3平台输入差异各平台输入事件与坐标差异

第 7 章 物理与碰撞——够用就好

节文章核心内容
7.1物理需求分级什么时候需要物理、需要到哪一级
7.2轻量碰撞与空间划分轻量碰撞检测与空间划分(P+S)
7.3物理手感调参重力、弹性与手感调参(W)

第 8 章 数据、存档与反作弊——数据不能丢

节文章核心内容
8.1存储与云存档抽象本地存储与云存档的统一抽象(P)
8.2存档结构与版本迁移存档结构演进与版本迁移(P+S)
8.3客户端校验与反作弊客户端可做的校验与反作弊边界

第 9 章 对象池与内存管理——别让 GC 卡住帧

节文章核心内容
9.1对象池对象池的复用与生命周期(P)
9.2内存与 GC 压力内存占用与 GC 压力剖析(P+S)
9.3弱机降级弱机识别与画质 / 逻辑降级(B)

第 10 章 平台能力适配层——本套核心主张

节文章核心内容
10.1平台 API 抽象层把平台 API 收敛到一个抽象层(P)
10.2一份逻辑两种宿主mock 宿主与真机宿主共用同一段逻辑(P)
10.3平台兼容矩阵平台能力差异的兼容矩阵

第三部分:体验打磨与质量(第 11–16 章)

第 11 章 UI 系统与界面实现——让界面不卡

节文章核心内容
11.1布局、层级与滚动UI 布局、层级管理与滚动列表(P+W)
11.2弹窗与提示反馈弹窗、Toast 与反馈的层级管理
11.3UI 合批与性能UI 合批与渲染性能(B)

第 12 章 动效与手感打磨——让操作「有感觉」

节文章核心内容
12.1缓动与时间轴缓动函数与时间轴编排(P+W)
12.2打击感与粒子反馈打击感、粒子与瞬时反馈(W)
12.3音效与震动反馈音效与震动反馈的触发与降级

第 13 章 新手引导实现——把玩家教会

节文章核心内容
13.1引导状态机用状态机实现新手引导(P)
13.2引导漏斗仿真引导漏斗与流失点仿真(S)
13.3渐进教学与容错渐进教学与误操作的容错(W)

第 14 章 性能优化——首包、帧率、内存

节文章核心内容
14.1首包与冷启动优化首包体积与冷启动时间优化(S)
14.2帧率与卡顿剖析帧率与卡顿的定位与剖析(S+B)
14.3内存与包体优化内存占用与包体优化

第 15 章 测试与质量保障——让改动敢发

节文章核心内容
15.1逻辑单元测试逻辑内核的单元测试(P)
15.2端到端回放自动化端到端回放与无头验收(P+W)
15.3兼容性与机型矩阵测试兼容性与机型矩阵测试(W)

第 16 章 工程化与协作——把工程收口

节文章核心内容
16.1代码组织与类型安全代码组织与类型安全约定(P)
16.2配置驱动数据表配置驱动的数据表与校验(P)
16.3CI 与发布管线持续集成与发布管线(D)

附录

篇目核心内容
附录 C:全书代码、配置与数据集索引pebble/ 文件索引、e<章号>_ 命名约定、六层复现命令

三条阅读路径

路径 A:工程与引擎课(第 1–4 章顺序读)
从引擎选型评分开始,经工程骨架、渲染适配,到资源与素材管线。这条路径回答「用什么、怎么搭、包体够不够」。读完你能用一张加权评分表解释引擎选择,并跑出分包与图集的体积账。

路径 B:内核实现课(第 5–10 章顺序读)
从固定步长循环与确定性开始,经输入交互、物理碰撞、存档反作弊、对象池内存,到平台能力适配层。这条路径回答「逻辑内核怎么跑起来、怎么跨宿主一致」。读完你能让同一段逻辑在 mock 宿主与浏览器里逐帧一致地跑。

路径 C:体验与质量课(第 11–16 章顺序读)
从 UI 与动效开始,经新手引导、性能优化、测试保障,到工程化协作。这条路径回答「怎么做得好玩、跑得顺、改得放心」。读完你能产出一个可玩 HTML 原型,并用无头验收证明它没坏。

常见问题速查

你想解决的问题看哪节
该选哪个引擎?1.1 、1.2
该不该自研内核?1.3
工程目录怎么分、模块边界在哪?2.1
首包放不下怎么分包?2.2 、2.3
小游戏没有 DOM 怎么渲染?3.1
刘海屏、异形屏怎么适配?3.2
图集怎么压、压多少合适?4.1
音频太大怎么办?4.2
热更新怎么保证版本一致?4.3
怎么保证确定性回放?5.1
切后台回来时间跳了怎么办?5.3
拖拽手感怎么调?6.2
碰撞怎么做到「够用」?7.2
存档怎么升级不出错?8.2
客户端能做哪些反作弊?8.3
掉帧卡顿怎么定位?9.2 、14.2
怎么做到一份逻辑两种宿主?10.2
平台 API 差异怎么屏蔽?10.1 、10.3
长列表滚动卡怎么办?11.1 、11.3
打击感怎么加?12.2
新手引导怎么实现、怎么测?13.1 、13.2
冷启动太慢怎么办?14.1
怎么给逻辑内核写测试?15.1 、15.2
数据表怎么配置与校验?16.2
怎么搭 CI 与发布管线?16.3

环境准备

本卷的代码块都在 pebble/ 工作区里可以复现,环境前提与卷一完全相同:Python 3.14.6(/opt/homebrew/bin/python3,带 numpy / pandas / PIL)与 Node 26(原生跑 TypeScript,不需要 tsc / npm install / package.json)。图表不用 matplotlib(本机未安装),SVG 是纯 Python 用 xml.etree 画出来的。下面这段 S 层脚本会替你把运行时确认一遍:

# file: sim/ch00_env_check.py
# tier: S
# verify: /opt/homebrew/bin/python3 sim/ch00_env_check.py
"""环境自检:确认《小游戏开发实战》三卷需要的运行时都在,并打印 pebble 的能力阶梯。

本机有两个 python3,不要混:
  /opt/homebrew/bin/python3 = 3.14.6(带 numpy / pandas / PIL),S 层仿真一律用它;
  /usr/bin/python3          = 3.9.6(系统自带,无 numpy/pandas),只能跑最朴素的脚本。
"""

from __future__ import annotations

import os
import shutil
import subprocess
import sys

EXPECT_PY = "/opt/homebrew/bin/python3"


def main() -> int:
    ok = True

    # /opt/homebrew/bin/python3 是符号链接,比较时解析到真实二进制再判断
    real = os.path.realpath(sys.executable)
    print(f"python     {sys.version.split()[0]}  ({real})")
    if real != os.path.realpath(EXPECT_PY):
        print(f"           注意:正文脚本一律用 {EXPECT_PY},当前解释器不同")

    try:
        import numpy
        import pandas

        print(f"numpy      {numpy.__version__}")
        print(f"pandas     {pandas.__version__}")
    except ImportError as e:  # noqa: BLE001
        ok = False
        print(f"FAIL 缺依赖:{e}(S 层需要 numpy 与 pandas)")

    node = shutil.which("node")
    if not node:
        ok = False
        print("FAIL node 未安装(P 层需要 Node 26 或更高)")
    else:
        ver = subprocess.run([node, "-v"], capture_output=True, text=True).stdout.strip()
        major = int(ver.lstrip("v").split(".")[0])
        note = "" if major >= 26 else "  (低于 26,原生 TypeScript 不可用)"
        print(f"node       {ver}{note}")
        ok = ok and major >= 26

    print("pebble 能力阶梯:S 仿真 / P 内核 / W 网页 / D 静态 / X 不可复现 / B 基准")
    print("OK 环境就绪" if ok else "FAIL 环境不满足")
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())

注意卷二工具链的命名约定:本卷所有 pebble/ 文件一律用 e<章号>_ 前缀(如 config/e04_atlas.json、sim/e04_atlas.py、core/src/e04/、core/test/e04_*.test.ts、web/build_e04.mjs),因为卷一的 ch01–ch15 前缀已被占用。这样 node --test 'core/test/e04_*.test.ts' 不会误匹配卷一的 ch*.test.ts。完整索引、逐层复现命令与排错顺序见附录 C 。

本页是卷二目录。可以从第 1 章 1.1 引擎格局与能力对比 开始顺序读,也可以先回卷一的目录 确认设计前提。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「minigame」更多文章

  1. 附录 F:全书公式、参数与数据集索引
  2. 9.3 同意管理与数据出境
  3. 9.2 COPPA 与儿童向游戏的限制