NarraLeaf

Frame

决定 Frame 展示哪个 Page,以及交给该 Page 的 params

nl.frame 的 Self 节点。Frame 是某个 Page 上的一块矩形,它在自己内部渲染另一个 Page,因此这些节点就是运行中的图在不离开玩家当前 Page 的前提下换掉画面内容的手段——标签页、设置面板、路由都靠它。每个节点作用于自己蓝图所属的那个 Frame,不带 Element 输入,也只出现在该 Frame 自己的蓝图里。要操作另一个 Frame,请使用 Element 分类中对应的节点

约定

  • 读取是纯节点,写入是 latent 节点。 本页每个 Get 节点都是 Pure,可用于 eventfunctionmacro 图。每个 Set 节点都是 Latent,只能用于 eventmacro——写入要经过宿主并异步完成,而 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 的设置

引脚方向类型说明
inin · exec
nextout · exec
propsin · datajson可选。不接线即保留当前 params。非对象结果会存成 {}

卡片字段

字段含义
targetSurfaceId要展示的 Page。空选项 None 会清空该 Frame

卡片上的 Page 选择在每次执行时都会被写入,而不是只在你改动过它时才写。停留在 NoneSet Frame Page 即使你只接了 Page props,也会把 Frame 清空。想只改 props 而不动目标,请使用 Set Params

Get Target Page

blueprint.frameWidget.getTargetPage · Pure

Get Target Page(读取目标 Page)读取该 Frame 当前展示的 Page id。这是文档中存储的 Surface id,不是编辑器里显示的名称

引脚方向类型说明
targetSurfaceIdout · datastringFrame 未展示任何 Page 时为空

Set Params

blueprint.frameWidget.setParams · Latent

Set Params(设置 params)替换交给被嵌入 Page 的 params 对象。它是替换而不是合并,所以要构造完整对象;若只打算改其中一个字段,先用 Get Params 读出当前值

引脚方向类型说明
inin · exec
nextout · exec
paramsin · datajson任何不是普通对象的值——包括数组和 null——都会存成 {}

该引脚不能在卡片上填字面量,也不会回落到当前值:不接线就执行这个节点会写入 {},把 params 清空

Get Params

blueprint.frameWidget.getParams · Pure

Get Params(读取 params)

引脚方向类型说明
paramsout · datajson始终是对象;Frame 没有 params 时为 {}

props.params 是可以由 Blueprint Value 驱动的属性之一。绑定到它的 Blueprint Value 必须返回一个 JSON 对象——其他任何结果,包括数组、null 和数字,在交给 Page 之前都会被归一为 {}。绑定生效期间,它的结果只在渲染时覆盖存储的 params:Set ParamsSet Frame PagePage props 仍然写入存储值,Get Params 也仍然读回它,因此这些写入永远到不了 Page

Set Enabled

blueprint.frame.setEnabled · Latent

Set Enabled(设置可交互)传入 false 会禁用该 Frame 的交互。它仍然渲染、仍然占布局,里面的 Page 也一样

引脚方向类型说明
inin · exec
nextout · exec
enabledin · databoolean

这里的布尔输入不能在卡片上填字面量,并且会回落到当前值:没有接线,或连线求值为 null 时,属性保持原样。接入的非布尔值只有在它是字符串 "true""1" 时才算 true

Get Enabled

blueprint.frame.getEnabled · Pure

Get Enabled(读取可交互)

引脚方向类型说明
enabledout · databoolean

Set Visible

blueprint.frame.setVisible · Latent

Set Visible(设置可见性)

引脚方向类型说明
inin · exec
nextout · exec
visiblein · databoolean

visible 传 false 会把该 Frame 连同里面整个 Page 从运行时元素树上摘掉——这不是 CSS 隐藏。被嵌入的 Page 会卸载,其中每个蓝图随之停止,Frame 回来时它们的 Init 会重新执行。隐藏后的 Frame 无法自己再现身:必须由别的地方对它调用 Set Element Visible。想要隐藏但保持挂载,请使用 Displayable Set Display

Get Visible

blueprint.frame.getVisible · Pure

Get Visible(读取可见性)

引脚方向类型说明
visibleout · databoolean

本页目录