diff --git a/docs/advanced/hooks-in-depth.md b/docs/advanced/hooks-in-depth.md index 1e53587..dda80a4 100644 --- a/docs/advanced/hooks-in-depth.md +++ b/docs/advanced/hooks-in-depth.md @@ -24,17 +24,17 @@ 先看几种容易出错的组合: -| 场景 | 实际存在的对象 | -| ------------------------------------ | --------------------------------------------------- | -| 一张地图有多个图层 | 每个图层一个 `MapLayer`,各自独立 | -| 楼层集合里有多张地图 | 每张地图一个 `IGameMap`,各自独立 | -| 场上有多个动态图块 | 每个动态图块一个 `IDynamicTile`,各自带一个 `mover` | -| 勇士与动态图块同时存在 | 勇士的移动器与图块的移动器是不同实例 | -| 同一张地图被重复打开或存在于多个沙盒 | 可能是多个 `IGameMap` 实例,名字相同但引用不同 | +| 场景 | 实际存在的对象 | +| ---------------------- | --------------------------------------------------- | +| 一张地图有多个图层 | 每个图层一个 `MapLayer`,各自独立 | +| 楼层集合里有多张地图 | 每张地图一个 `IGameMap`,各自独立 | +| 场上有多个动态图块 | 每个动态图块一个 `IDynamicTile`,各自带一个 `mover` | +| 勇士与动态图块同时存在 | 勇士的移动器与图块的移动器是不同实例 | +| 同一楼层 id 被重新创建 | 旧引用与新引用是两个 `IGameMap`,名字相同但引用不同 | 钩子被触发,只能说明「它所属的实例发生了事件」,不能说明那就是你想要的那个实例。比如地图级钩子的 `onResizeLayer(layer, width, height)` 会收到该地图每个图层的尺寸变化;如果你不比较 `layer`,就会对每个图层都执行一次。 -地图与图层之间还有一层内部转发:`GameMap.addLayer` 会为每个图层注册一个 `StateMapLayerHook`,把图层的 `onResize` 转发到地图的 `onResizeLayer`,并带上具体 `layer`。所以地图级钩子能拿到图层身份;图层级钩子反而拿不到「我是谁」,因为图层钩子的回调参数里没有 layer。 +地图与图层之间还有一层内部转发:`GameMap.addLayer` 会为每个图层注册一个 `StateMapLayerHook`,把图层的 `onResize` 转发到地图的 `onResizeLayer`,并带上具体 `layer`。所以地图级钩子能拿到图层身份;图层级钩子的大多数回调参数里没有 layer,只有动态图块方法能通过 `tile.layer` 间接拿到。 ## 身份从哪里来 @@ -244,7 +244,7 @@ layer.addHook(hook); ## 异步钩子 -钩子分同步与异步两类。同步钩子在触发时立即执行;异步钩子返回 `Promise`,引擎会把本次触发的返回值收集起来,用 `Promise.all` 并发等待。 +钩子分同步与异步两类。同步钩子在触发时立即执行;异步钩子返回 `Promise`。在本篇列出的异步钩子族里,引擎会把本次触发的返回值收集起来,用 `Promise.all` 并发等待。 本篇核对过的异步钩子族: