Frame
决定 Frame 展示哪个 Page,以及交给该 Page 的 params
nl.frame 的 Self 节点。Frame 是某个 Page 上的一块矩形,它在自己内部渲染另一个 Page,因此这些节点就是运行中的图在不离开玩家当前 Page 的前提下换掉画面内容的手段——标签页、设置面板、路由都靠它。每个节点作用于自己蓝图所属的那个 Frame,不带 Element 输入,也只出现在该 Frame 自己的蓝图里。要操作另一个 Frame,请使用 Element 分类中对应的节点
约定
- 读取是纯节点,写入是 latent 节点。 本页每个
Get节点都是Pure。每个Set节点都是Latent:写入要经过宿主并异步完成 - 一个 Frame 持有两样东西:目标 Page 和一个
params对象。 目标必须是 Page;卡片下拉框只列出 Page,并排除该 Frame 所在的 Page 以及任何会绕回自身形成嵌套循环的 Page。Page 是什么、它和游戏界面 Surface 有何区别,见 Surface 与 Page params就是被嵌入 Page 的 Page props。 Frame 内的 Page 用 App 分类的Get Page Param读取它声明的参数,用Get Page Props读取整个对象。params中没有的参数读取默认值。在编辑器中,Frame 的属性面板为目标 Page 的每个参数各显示一个字段,见页面参数。它通过Emit Page Event回话,事件会抵达本 Frame 的Page Event事件 Head,见 Events- 没有改变任何东西的写入什么都不做。 两个写入节点都会把传入的目标和 params 与当前值比对(params 按 JSON 相等比对),两者都相同时直接返回。重复执行它们不会重新挂载 Page,也不会重放进场动画
- 这些节点都不能在 Blueprint Value 中运行。
Get节点确实是纯节点,但 Blueprint Value 在widgetValue宿主上求值,而本页所有节点的作用域都限定在 Frame 自己的主蓝图。要在 Blueprint Value 里读这个 Frame,请放一个指向它的Element字面量,再用 Element 分类的读取节点 - 可见与启用节点各合为一组。 浏览创建浮窗时,
Get Visible与Get Enabled合为一行获取可见性或启用状态,Set Visible与Set Enabled合为一行设置可见性或启用状态。搜索时每个节点按自己的名称列出;已放置的卡片可用标题旁的 ▾ 在两者之间切换。见同类节点
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。非对象结果会存成 {} |
卡片字段
| 字段 | 含义 |
|---|---|
Page | 要展示的 Page。空选项 None 会清空该 Frame |
所选 Page 声明了参数时,卡片会在 Page props 之前为每个参数长出一个输入,与 Go Page 相同(见 App)。传入的值叠加在 Page props 之上,替换 Frame 的 params。没有传入任何值且 Page props 未连线时,params 保持不变
卡片上的 Page 选择在每次执行时都会被写入,而不是只在你改动过它时才写。停留在 None 的 Set Frame Page 即使你只接了 Page props,也会把 Frame 清空。想只改 props 而不动目标,请使用 Set Params
Frame 切换 Page 期间,在它内部的点击等指针输入到 Frame 为止。正在离开的那一页不接收输入,即将到来的那一页上的元素照常响应,而 Frame 自己的事件 Head、它周围的元素、所在的 Surface 以及应用逻辑都收不到。切换结束后,指针输入会重新从 Frame 向上传递,见事件冒泡
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 时为 {} |
Frame 的 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 Frame Visible。想要隐藏但保持挂载,请使用 Displayable Set Display
Get Visible
blueprint.frame.getVisible · Pure
Get Visible(读取可见性)
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
visible | out · data | boolean |