KNOWLEDGE LIBRARY / 61 NOTES

把知识变成
可探索的系统

算法、数据结构、游戏 AI 与工程设计。普通笔记用于系统阅读,重点主题配有可单步调试的交互实验。

YOUR LEARNING MAP

你的学习进度

当前未登录,学习记录保存在这台设备。
已完成0 / 61
学习中0
总进度0%
打开任意文章即可开始记录进度。

学习章节

6 CHAPTERS · UPDATED 2026-07-28

交互专题

17 LABS · LEARN BY DOING
ABILITY / END-TO-END FLOW

一次技能从输入到结束

沿激活闸门、运行实例、编排、命中、结算与清理逐步调试完整链路。

先读讲解 →
EFFECT / LIFECYCLE

Effect / Buff 生命周期

对比瞬时、持续、周期、叠层、刷新、到期和主动移除。

先读讲解 →
TARGET QUERY / GEOMETRY TRACE

目标筛选与命中判定

拖动角色与目标,拆开圆形、扇形、盒形的粗筛和精确判断。

先读讲解 →
RESOURCE / OWNERSHIP

资源作用域与引用释放

观察请求合并、缓存命中、Owner 矩阵和最终底层释放。

先读讲解 →
NETWORK / RECONCILE

网络预测与服务器校正

调整延迟与丢包,对齐输入 Tick、预测轨迹、权威状态和重放队列。

先读讲解 →
UI / VIRTUALIZATION

虚拟列表与节点复用

用固定槽位滚动大量数据,观察索引映射、复用和异步取消。

先读讲解 →
CONFIG / BUILD GATE

配置数据生成管线

从源数据到强类型快照,观察分层校验、错误袋、索引和发布闸门。

先读讲解 →
UI / STACK & POOL

UI 页面栈与面板池

拆解打开、覆盖、返回、复用、绑定清理和旧回调冲突。

先读讲解 →
STATE SOURCE / ARBITRATION

状态来源与技能仲裁

用来源账本和阶段矩阵拆解标签聚合、激活阻挡、预输入与打断清理。

先读讲解 →
PROJECTILE / MOTION FEEDBACK

命中后的运动与投射物

沿运动策略、扫掠命中、击退曲线、碰撞反馈和终态清理逐步调试。

先读讲解 →
DIRTY FLAGS / LOCAL RECOMPUTE

属性脏标记与局部重算

观察实体粗筛、属性精筛、同帧合并、即时刷新和失效引用清理。

先读讲解 →
PATHFINDING / STEP DEBUG

A* 寻路

逐步观察代价、Open / Closed 集合与 Parent 回溯。

先读讲解 →
SWARM AI / LIVE LOGIC

怪物集群 AI

在手动与自动模式间切换,观察群体决策的最小闭环。

先读讲解 →
BINARY HEAP / LIVE STRUCTURE

二叉堆优先队列

同步观察数组与树,逐步调试 BubbleUp 和 BubbleDown。

先读讲解 →
BITMASK / LIVE STATE

Flags / BitMask

覆盖组合、判断、移除、合法叠加与互斥结果建模。

先读讲解 →
RANDOM / DISTRIBUTION

随机系统

对比权重、保底、洗牌袋、Seed 与稳定随机。

先读讲解 →
SPATIAL / QUERY PIPELINE

空间划分

覆盖九宫格、空间 Hash、四叉树和两阶段范围查询。

先读讲解 →

专题地图

10 CATEGORIES

全部笔记

61 ARTICLES · 按分类展开
工程设计25 ARTICLES

动作游戏完整战斗判定

一次攻击不是“检测到重叠就扣血”,而是攻击实例、空间候选、合法性过滤、同次攻击去重、防御规则、伤害结算和反馈表现组成的流水线。每一层都应能解释目标为什么被命中或被拒绝。

未开始
阅读 →

对话系统:节点、条件、效果与跳转

对话节点保存当前内容,选项表示可以走的边,Condition 只判断能否选择,Effect 在选择成立后修改状态,Jump 用稳定 ID 进入下一个节点。判断和修改必须分开,否则仅仅显示选项就可能消耗物品。

未开始
阅读 →

对象池

对象池用“回收后再次使用”代替高频创建和销毁。它减少分配和实例化抖动,但不会自动重置旧状态;池中对象只是暂时空闲,不是全新对象。

未开始
阅读 →

对象生命周期状态与异步竞态

异步结果回来时,“对象引用还不为空”不足以证明结果仍然属于当前对象。生命周期状态和 generation token 要共同回答:对象是否还活着、是否仍是发起请求时的那一代。

未开始
阅读 →

缓存:建立、失效、版本与重建

缓存是可重建副本,权威来源才决定正确数据。失效表示“现有副本不能继续被信任”,版本号用来阻止旧的异步重建结果覆盖更新的数据。

未开始
阅读 →

门面模式与泛型消重

门面把底层 ECS、存储或网络细节收在稳定 API 后面;泛型 helper 抽取多个入口中完全相同的流程,只把类型和少量差异作为参数。前者控制依赖方向,后者减少重复实现。

未开始
阅读 →

命令模式:队列、撤销与事件边界

Command 表达“请执行一个动作”,可以排队、记录结果并按明确规则撤销;Event 表达“某件事已经发生”,监听者不应决定原动作是否成立。撤销依赖执行时保存的事实,不能靠重新猜一个反向操作。

未开始
阅读 →

命中后的运动与投射物

投射物每帧应从旧位置扫掠到新位置,候选按命中时间排序后依次经过阵营、重复命中、穿透次数和目标间隔等规则。命中后的击退也要按时间曲线的增量推进,不能每帧重复叠加累计总量。

未开始
阅读 →

配置热更新:版本一致性与失败可见性

热更新应先完整下载和验证一套不可变配置快照,再用一次原子切换让新请求看到新版本。不能逐张表边下载边替换,否则同一次业务可能混用两个版本。

未开始
阅读 →

配置数据生成管线:让错误停在构建期

配置管线把策划源数据依次经过结构、引用和业务语义校验,只有全部通过才生成强类型快照和索引。目标不是“尽量把坏数据读进去”,而是让错误在构建期带着行号和字段名暴露。

未开始
阅读 →

事件队列:延迟、监听、调试与事件风暴

事件队列把“事件发生”和“监听者何时处理”分开,能稳定顺序并避免深层同步重入;代价是结果不再立刻可见,还必须定义延迟、容量和事件风暴策略。

未开始
阅读 →

事件系统与发布订阅

发布订阅让发送者只声明“发生了什么”,而不直接调用 UI、音效、成就等具体模块。它降低直接依赖,但也会让调用链变得隐形,所以事件载荷、订阅生命周期和调试记录必须明确。

未开始
阅读 →

数据驱动 Timeline:从编辑器到实体消费

Timeline 源数据由编辑器修改,构建阶段把它验证并编译成运行时快照,播放实例按固定逻辑帧推进,Clip 只发语义命令,最终由实体系统仲裁和落地。编辑器预览、配置快照和运行实例是三个不同状态。

未开始
阅读 →

网络抖动缓冲、快照插值与可观测性

抖动缓冲故意把显示时间放在最新服务器时间之后一小段距离,用已收到的两帧快照做插值。它用固定的额外延迟换取平滑,不能消除丢包,也不能替代本地预测。

未开始
阅读 →

网络预测与服务器校正:先响应,再用权威结果收敛

客户端立即用本地输入预测,服务器按 Tick 生成权威状态;客户端收到确认后回到服务器状态,删除已确认输入,再重放尚未确认的输入追上当前时刻。校正不是简单把角色瞬移到旧快照。

未开始
阅读 →

虚拟列表与节点复用:滚动一万条数据,只保留一小扇窗口

虚拟列表只创建“可见数量 + 缓冲数量”的节点,滚动时改变节点绑定的数据索引和位置,而不是为每条数据创建一个 UI 对象。节点数量与总数据量解耦。

未开始
阅读 →

一次技能从输入到结束

技能流程应把输入意图、激活预检、资源提交、运行实例、时间线、目标查询、Effect 和结束清理分开。预检可以失败而不产生副作用,一旦提交资源就必须保证后续成功结束或明确回滚。

未开始
阅读 →

状态来源与技能仲裁

状态标签不能只记录“有或没有”,还要记录由谁添加。多个技能都提供 Stunned 时,移除其中一个来源不应把另一个来源仍维持的状态一起清掉;技能仲裁则根据阶段和优先级决定新旧实例怎样共存。

未开始
阅读 →

资源生命周期统一管理

资源管理的核心不是“在哪里调用 Load”,而是谁拥有引用、何时释放以及异步结果回来时作用域是否还有效。统一句柄和作用域能让加载与释放形成一一对应的责任链。

未开始
阅读 →

资源作用域与引用释放:让“谁还需要它”成为可观察状态

资源系统至少要能观察资源记录、请求记录和作用域记录。相同资源的并发请求应合并底层加载,但每个调用者仍获得独立引用责任;Dispose 作用域只释放属于该作用域的引用。

未开始
阅读 →

ECS:实体、组件、系统与数据布局

ECS 是一种组织大量游戏对象的方式。先记住一句话:

未开始
阅读 →

Effect 与 Buff 生命周期:从一次申请到彻底清理

Definition 是静态配置,Spec 是本次申请参数,Runtime Effect 才是目标身上持续变化的实例。Apply Gate 先判断能否应用,之后才修改属性、建立周期任务和叠层状态;到期或移除时必须按相反责任顺序清理。

未开始
阅读 →

UE Gameplay 框架:职责与状态流

UE Gameplay 框架把规则、全局可观察状态、玩家连接和可控制实体分给不同对象:GameMode 负责服务端规则,GameState 负责复制的全局状态,PlayerController 代表玩家连接,Pawn 是当前被控制…

未开始
阅读 →

UI 数据绑定:依赖追踪与批量刷新

UI 数据绑定应记录“哪个显示结果依赖哪些源数据”,源数据变化时只标记相关绑定,再在统一刷新点合并更新。它不是每个字段一变就立即递归刷新整棵 UI。

未开始
阅读 →

UI 页面栈与面板池:导航历史、活动实例与可复用对象不是一回事

页面栈记录返回顺序,活动实例表回答某页面现在是否打开,面板池保存已经关闭但可复用的对象。一个页面出现在导航历史中,不等于它当前仍有活动实例。

未开始
阅读 →
计算机基础02 ARTICLES

虚拟内存、页、堆栈与 malloc

程序里的指针通常是虚拟地址,页表把虚拟页映射到物理页框;栈和堆是运行时组织方式,malloc 先向用户态分配器申请,并不等于每次都直接向操作系统要一页内存。

未开始
阅读 →

原子操作、内存屏障与线程可见性

原子操作保证某个操作不可被并发撕裂,内存顺序约束多个读写之间的可观察关系,happens-before 才是判断另一个线程能否合法看到数据的主线。原子变量安全不等于它旁边的普通数据自动安全。

未开始
阅读 →
数据结构01 ARTICLES

二叉堆优先队列

优先队列保证每次取出当前优先级最高或最低的元素,但不保证所有元素整体有序。二叉堆通过一个局部不变量做到这一点:父节点始终不比子节点更差。

未开始
阅读 →
算法11 ARTICLES

集群 AI 槽位分配与非攻击意图

槽位分配解决“多只怪物围住同一目标时各自站哪里”,稳定分配解决“不要每帧换座位”,非攻击意图解决“没拿到攻击权的怪物仍然做什么”。三者共同避免所有怪挤向同一点或原地发呆。

未开始
阅读 →

空间划分:九宫格与四叉树

空间划分先按位置缩小候选范围,再做精确距离或碰撞判断。九宫格适合分布较均匀、查询半径接近格子大小的对象;四叉树会在局部密集处继续切分,适合密度变化较大的空间。

未开始
阅读 →

目标筛选与命中判定:从世界坐标到入选原因

命中判定应逐层缩小集合:空间粗筛只负责找“可能靠近”的对象,阵营和状态过滤负责排除不合法目标,形状精判才回答是否真正位于圆、扇形或盒形内。不要让最昂贵的精判直接面对全世界对象。

未开始
阅读 →

启发式决策模型:怪物集群候选打分

启发式打分把多个“不完全确定但有偏好”的条件变成同一尺度的分数,然后选择当前最高分候选。过滤负责排除绝对不能选的对象,打分只比较剩余对象,执行前还要再次验证世界状态。

未开始
阅读 →

算法工具箱:二分、Top K、并查集与动态规划

这四种工具解决的不是同一类问题:二分缩小有序搜索区间,Top K 只保留最重要的 K 项,并查集维护不断合并的分组,动态规划复用重复子问题。先识别问题形状,再选择工具。

未开始
阅读 →

图遍历与最短路:BFS、DFS、Dijkstra

BFS 按层扩展,适合无权图最少边数;DFS 沿一条分支深入,适合遍历、回溯和结构检查;Dijkstra 每次扩展当前累计成本最低的节点,适合边权非负的最短路。三者的差异主要在“下一步从哪里取节点”。

未开始
阅读 →

物理碰撞检测基础:Broad Phase、AABB、OBB、BVH 与 SAT

碰撞检测分阶段,是因为“快速排除绝大多数不可能碰撞的对象”比“对所有对象都做精确几何计算”更划算。Broad Phase 产生候选对,Narrow Phase 再用 AABB、OBB、SAT 或其他形状算法确认。

未开始
阅读 →

A 星寻路中的 G 值与 Parent 回溯

A 星中的 G 是从起点走到当前节点的真实累计成本,H 是到终点的估计成本,F = G + H 用来选择下一步扩展谁。Parent 不保存整条路径,只记录当前最优路线从哪里来。

未开始
阅读 →

CCD:连续碰撞检测与高速穿透

离散碰撞只检查一帧开始和结束的位置,高速物体可能在两次采样之间跨过障碍。CCD 检查整段运动区间,并尝试求出首次接触时间 TOI。

未开始
阅读 →

GJK:凸形状碰撞检测理解笔记

GJK 不直接枚举两个凸形状的所有边是否相交,而是在 Minkowski Difference 的支持点上构造 Simplex,并不断判断这个 Simplex 能否包围原点。原点在其中意味着两个原形状重叠。

未开始
阅读 →

NavMesh:多边形寻路与动态障碍

NavMesh 寻路先在“可行走多边形图”上找到一条走廊,再通过门户和漏斗算法把多边形序列收紧成实际拐点。搜索得到的多边形列表不是角色最终要逐点行走的折线。

未开始
阅读 →
游戏逻辑常用模式05 ARTICLES

时间控制小模式:冷却、计时器、延迟与 Tick

冷却回答“现在能不能再次使用”,计时器回答“还剩多久”,延迟触发回答“到点执行一次什么”,Tick 回答“按什么频率重复更新”。它们都使用时间,但保存的状态和到点后的行为不同。

未开始
阅读 →

属性脏标记与局部重算

属性脏标记是在普通 Dirty Flag 上增加“哪一项变了”。全局标记回答是否需要刷新,局部标记集合回答只重算 Attack、Defense 还是 Speed,避免一个速度 Buff 让全部属性重新计算。

未开始
阅读 →

随机系统

随机系统不是只有 Random.Range。普通随机决定等概率抽取,加权随机决定不同概率,可复现随机保证相同 seed 得到相同序列,保底和洗牌袋则主动限制连续坏结果。

未开始
阅读 →

位标记 Flags 与 BitMask

Flags 用一个整数的不同二进制位保存多个互不排斥的真假状态。按位或负责添加,按位与负责检查,按位与反码负责移除;读懂它的关键是观察每一位,而不是把整数当普通数值。

未开始
阅读 →

脏标记 Dirty Flag

脏标记把“数据已经变化”和“派生结果已经重算”分成两个时刻。它适合多次写入、较少读取且重算有成本的场景,目的不是让计算消失,而是把重复计算合并。

未开始
阅读 →
游戏AI与逻辑建模05 ARTICLES

局部避障:RVO 与 ORCA 理解笔记

RVO 和 ORCA 不负责从地图起点规划到终点,它们只在短时间范围内调整当前速度,避免附近移动体即将发生的碰撞。输入是位置、半径、当前速度和期望速度,输出仍是一个速度。

未开始
阅读 →

行为树执行栈、节点返回值与中断

行为树节点每次 Tick 只返回三种结果:Success、Failure 或 Running。组合节点根据子节点返回值决定停在哪、继续谁;中断则必须沿当前运行路径执行清理,不能只把根节点状态改掉。

未开始
阅读 →

状态机、行为树、效用 AI 与 GOAP 对比

FSM 直接定义状态怎样切换,行为树组织每帧决策流程,效用 AI 给候选行为打分,GOAP 根据前置条件和效果搜索行动序列。它们不是从低级到高级的替代关系,而是用不同方式回答“现在做什么”。

未开始
阅读 →

HTN 与 MCTS 决策模型

HTN 从设计者给出的任务分解规则生成可执行计划,MCTS 通过多次模拟估计行动结果。HTN 更依赖明确的领域知识,MCTS 更依赖可快速复制和推进的状态模型。

未开始
阅读 →

Steering、RVO、ORCA 与速度空间

Steering 先产生“我想怎样移动”的期望速度,RVO/ORCA 再根据邻居把危险速度裁掉,移动控制器最后把可行速度落到角色。位置空间描述目标在哪里,速度空间描述下一小段时间采用什么速度。

未开始
阅读 →
知识路线01 ARTICLES

后续学习计划

更新于 2026-07-28。当前知识库共有 61 篇学习笔记和 17 个交互专题;本轮列出的继续补强、尚未开始与可选深化内容均已加入网站。

未开始
阅读 →
C++基础03 ARTICLES

C++ 对象模型、虚表与动态绑定

动态绑定解决的是:代码手里只有基类指针,却要在运行时调用真实派生类型的覆写函数。C++ 标准保证调用语义,虚表和虚指针只是编译器常用的实现方法,不应被当成语言强制布局。

未开始
阅读 →

C++ 左值、右值、移动语义与任务队列

左值和右值描述表达式怎样关联对象,移动语义允许资源所有权从一个对象转交给另一个对象。std::move 本身不搬任何字节,它只是把表达式转换成可以匹配移动操作的形式。

未开始
阅读 →

RAII、智能指针与资源所有权

RAII 的核心是把“谁负责释放”绑定到对象生命周期。uniqueptr 表达唯一责任,sharedptr 表达共同延长生命周期,weakptr 只观察;它们首先是所有权语义,其次才是指针工具。

未开始
阅读 →
CSharp基础数据结构06 ARTICLES

集合常见配套语法

var、泛型、out、lambda 和 foreach 不是五套孤立语法,它们经常共同出现在一次集合查询中:泛型约束元素类型,lambda 描述条件,out 返回额外结果,foreach 顺序消费集合,var 让局部类型由右侧表达…

未开始
阅读 →

集合排序查找筛选

排序改变整个集合的顺序,查找返回一个元素,筛选产生多个匹配元素,判断只返回真假,删除则会修改原集合。它们可能使用相似的 lambda,但结果类型和副作用完全不同。

未开始
阅读 →

Dictionary 常用操作与深入用法

Dictionary<TKey, TValue> 用唯一 key 定位 value。它适合回答“ID 为 205 的玩家数据是什么”,不适合回答“生命值最低的玩家是谁”,后者仍需要遍历或额外索引。

未开始
阅读 →

HashSet:把“是否见过”变成可观察的状态

HashSet<T> 只记录“某个值是否已经出现”,不保存重复次数,也不提供按下标访问。它最有价值的地方是把“检查是否存在”和“首次加入”合成一次 Add。

未开始
阅读 →

List 常用操作与删除规则

List<T> 是可按下标访问、会保持顺序的动态数组。真正容易出错的不是 Add,而是删除后后续元素左移,导致下标和遍历位置发生变化。

未开始
阅读 →

Queue 与 Stack 常用操作

Queue 和 Stack 保存的可以是同一批数据,区别只在“下一次取谁”:Queue 先进先出,Stack 后进先出。选择它们是在选择处理顺序,而不仅是在选择 API。

未开始
阅读 →
CSharp语言基础02 ARTICLES

C# 类型、接口、委托与空值

这四个概念分别回答四个问题:类型决定“一个值是什么”,接口决定“它承诺能做什么”,委托决定“把哪段行为当作数据传递”,空值决定“这里是否可能什么都没有”。不要把它们背成四组语法,要看它们怎样共同约束一次调用。

未开始
阅读 →

C# 属性、常量、静态与只读语义

字段保存数据,属性控制读写入口,readonly 限制对象建立后的重新赋值,const 表示编译期固定值,static 表示数据属于类型而不是某个实例。选择它们时只问一句:这个值由谁拥有,允许在什么时候改变?

未开始
阅读 →
OPTIONAL ACCOUNT / CLOUD PROGRESS

账号与学习进度