重新编辑已组装的场景¶
Assemble 不是一扇单向门。一旦某个槽位的节点已经存在于 Node View 里,OSA 就不再创建它们,而开始就地编辑它们。
new 与 existing¶
Inspector 里的每个组件都带着一个标记,说明它属于两者中的哪一个:
| 标记 | 含义 |
|---|---|
+ |
new —— 这个节点还不存在;Assemble 会创建它 |
| ▪(方块) | existing —— 这个节点在 Node View 里;Assemble 会编辑它 |
| 灰色 | 该组件没有勾选,所以两种情况下都不会有事发生 |
树只画出其中一种状态 —— existing —— 其余每一行都不标。每一行都有标记那就是纹理,不是信号;按组件给答案的地方是 Inspector。
它是形状,不是颜色
这些标记用标签自身的颜色绘制,所以换主题之后、以及对色盲读者,这个读法依然成立。区别在于 + 对方块,不是紫色对青色。
"就地编辑"是什么意思¶
对一个标为 existing 的槽位,Assemble 不会创建第二个节点,也不会移动第一个。它会:
- 如果你给槽位改了名,就给节点改名,
- 重写你改过的属性 —— composite 模式、对齐、混合模式、效果数值、backdrop 颜色和标题,
- 不动节点在 Node View 里的位置,
- 之后再次把该槽位标为 existing,这样下一次 Assemble 又是一次更新,而不是一次复制。
最后这一点正是 Assemble 可以反复按的原因。这就是正常的工作节奏:组装,在 Harmony 里看看,回来,改点东西,再组装。
一个声称存在却说不出在哪的节点会被报为 unaddressable 并被搁置,因为重建它会让你有两个。见 组装。
树不是 "Top"¶
这是让人吃惊的一部分,也正是上一节存在的全部意义。
对新节点来说,staging 树的根意味着 Top —— Node View 的顶层。这是默认值,而对一个你从零搭起的场景来说,这是唯一合理的读法。
对已存在的节点来说,树的根是一个地址。 一个来自场景的 0 层行代表被导入的那条链的根 —— 你带进来的东西的最外层节点 —— 而它下面的一切都是那条链在 Harmony 里的真实位置,不是它在 Top 的一个副本。
所以同样的缩进,会因为这一行的来处不同而意味着两件不同的事,而标记告诉你是哪一件:
| 一个 0 层的行如果是…… | 它位于 |
|---|---|
new(+) |
Top |
| existing(▪) | 它那条链在场景里实际所在的位置 |
新子级落在哪¶
把新东西挂到一个已存在的槽位上,它会在 Harmony 里那个槽位的上下文中创建 —— 不是在 Top。
OSA 按这个优先级把上下文解析成一个锚点:
GROUP > PEG > COMP > DRAWING
Group 排第一是有实测理由的:当 peg 优先时,一个 P+G super node 的新子级会诞生在 group 外面。group 就是子级的上下文 —— 和创建路径上完全一致,在那里勾上 Group 就会把子级放进去。
所以:
- 在一个已存在的
hero=P-G-C下加一张 drawing,它会出现在hero-G内部,接进hero-C; - 加一个效果,它落在那个槽位的链上,落在 Wide Bus 为它预留的那条带子里。
不会有东西仅仅因为在你树里缩进在一个 0 层行之下,就跑到 Top 去。
移动东西¶
| 你移动的是 | Assemble 时会发生什么 |
|---|---|
| 一个新行,放在任何地方 | 它在新位置被创建;没有什么要重连 |
| 链内部的一个已存在行 | 各个 peg 会被重新连接以匹配新的父子关系 |
| 一条已导入链的根 | 整条链在它的新位置下被重新连接 |
| 什么都没动 —— 你只加了新行 | 新节点去到那条链自己的位置,无论它连在哪 |
最后一行值得记住:如果你不移动那条导入的链,往它上面加东西也不会移动它。新的部件嵌进链已经在的地方。
虚拟路径¶
Inspector 的 Path 字段显示一个槽位解析到的地址,读起来就像 Node View 自己的路径:
Top/ParentGroup-G/SelfGroup-G/Element-C
什么会出现在里面的规则:
- 祖先只有在是 group 时才贡献一层 —— 中间的 peg 或 backdrop 不增加层级,因为它们在 Harmony 里也都不创建层级;
- 槽位自身贡献它的 group(如果有),然后是它的 comp 或 drawing;
- peg、backdrop 和效果从不出现 —— 它们在层级里面,不是自己一层。
背后没有文件的槽位显示 New Node (Memory)。那不是错误 —— 它表示这一行还没有地址,因为它从未被组装过。
把一个场景捡回来¶
Magnetize Scene 通过你的 magnets 读取现有的 Node View,并把找到的东西放进 staging —— 你就是这样重新打开一个昨天组装的场景,或者别人搭的场景,然后继续按槽位编辑它。
它带进来的一切到货时都标着 existing,带着地址,所以从第一次按下起,本页的规则就适用。