Frame
决定 Frame 展示哪个 Page,以及交给该 Page 的 params
nl.frame 的 Self 节点。Frame 是某个 Page 上的一块矩形,它在自己内部渲染另一个 Page,因此这些节点就是运行中的图在不离开玩家当前 Page 的前提下换掉画面内容的手段——标签页、设置面板、路由都靠它。每个节点作用于自己蓝图所属的那个 Frame,不带 Element 输入,也只出现在该 Frame 自己的蓝图里。要操作另一个 Frame,请使用 Element 分类中对应的节点
约定
- 读取是纯节点,写入是 latent 节点。 本页每个
Get节点都是Pure,可用于event、function和macro图。每个Set节点都是Latent,只能用于event和macro——写入要经过宿主并异步完成,而function图会同步返回给调用者,没有地方安放一个待定结果 - 一个 Frame 持有两样东西:目标 Page 和一个
params对象。 目标必须是 Page;卡片下拉框只列出 Page,并排除该 Frame 所在的 Page 以及任何会绕回自身形成嵌套循环的 Page。Page 是什么、它和游戏界面 Surface 有何区别,见 Surface 与 Page params就是被嵌入 Page 的 Page props。 Frame 内的 Page 用 App 分类的Get Page Props读取整个对象,读取不存在的字段得到null。它通过Emit Page Event回话,事件会抵达本 Frame 的Page Event事件 Head,见 Events- 没有改变任何东西的写入什么都不做。 两个写入节点都会把传入的目标和 params 与当前值比对(params 按 JSON 相等比对),两者都相同时直接返回。重复执行它们不会重新挂载 Page,也不会重放进场动画
- 这些节点都不能在 Blueprint Value 中运行。
Get节点确实是纯节点,但 Blueprint Value 在widgetValue宿主上求值,而本页所有节点的作用域都限定在 Frame 自己的主蓝图。要在 Blueprint Value 里读这个 Frame,请放一个指向它的Element字面量,再用 Element 分类的读取节点
Set Frame Page
blueprint.frameWidget.setTargetPage · Latent
Set Frame Page(设置 Frame 的目标 Page)切换该 Frame 展示的 Page,并可在同一次写入中一并替换它的 params。切换会走 Frame 的 Page 动画——它自己的设置,或者在设为继承时走目标 Page 的设置
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
props | in · data | json | 可选。不接线即保留当前 params。非对象结果会存成 {} |
卡片字段
| 字段 | 含义 |
|---|---|
targetSurfaceId | 要展示的 Page。空选项 None 会清空该 Frame |
卡片上的 Page 选择在每次执行时都会被写入,而不是只在你改动过它时才写。停留在 None 的 Set Frame Page 即使你只接了 Page props,也会把 Frame 清空。想只改 props 而不动目标,请使用 Set Params
Get Target Page
blueprint.frameWidget.getTargetPage · Pure
Get Target Page(读取目标 Page)读取该 Frame 当前展示的 Page id。这是文档中存储的 Surface id,不是编辑器里显示的名称
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
targetSurfaceId | out · data | string | Frame 未展示任何 Page 时为空 |
Set Params
blueprint.frameWidget.setParams · Latent
Set Params(设置 params)替换交给被嵌入 Page 的 params 对象。它是替换而不是合并,所以要构造完整对象;若只打算改其中一个字段,先用 Get Params 读出当前值
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
params | in · data | json | 任何不是普通对象的值——包括数组和 null——都会存成 {} |
该引脚不能在卡片上填字面量,也不会回落到当前值:不接线就执行这个节点会写入 {},把 params 清空
Get Params
blueprint.frameWidget.getParams · Pure
Get Params(读取 params)
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
params | out · data | json | 始终是对象;Frame 没有 params 时为 {} |
props.params 是可以由 Blueprint Value 驱动的属性之一。绑定到它的 Blueprint Value 必须返回一个 JSON 对象——其他任何结果,包括数组、null 和数字,在交给 Page 之前都会被归一为 {}。绑定生效期间,它的结果只在渲染时覆盖存储的 params:Set Params 和 Set Frame Page 的 Page props 仍然写入存储值,Get Params 也仍然读回它,因此这些写入永远到不了 Page
Set Enabled
blueprint.frame.setEnabled · Latent
Set Enabled(设置可交互)传入 false 会禁用该 Frame 的交互。它仍然渲染、仍然占布局,里面的 Page 也一样
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
enabled | in · data | boolean |
这里的布尔输入不能在卡片上填字面量,并且会回落到当前值:没有接线,或连线求值为 null 时,属性保持原样。接入的非布尔值只有在它是字符串 "true" 或 "1" 时才算 true
Get Enabled
blueprint.frame.getEnabled · Pure
Get Enabled(读取可交互)
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
enabled | out · data | boolean |
Set Visible
blueprint.frame.setVisible · Latent
Set Visible(设置可见性)
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
visible | in · data | boolean |
visible 传 false 会把该 Frame 连同里面整个 Page 从运行时元素树上摘掉——这不是 CSS 隐藏。被嵌入的 Page 会卸载,其中每个蓝图随之停止,Frame 回来时它们的 Init 会重新执行。隐藏后的 Frame 无法自己再现身:必须由别的地方对它调用 Set Element Visible。想要隐藏但保持挂载,请使用 Displayable Set Display
Get Visible
blueprint.frame.getVisible · Pure
Get Visible(读取可见性)
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
visible | out · data | boolean |