Skip to content
On this page

相对布局

相对布局让直接子组件使用父布局内部坐标。子组件先在父级上下文中计算 X、Y,再自动叠加父布局的最终位置,适合整体移动的面板和复用组件组。

布局的 visiblevisibleWhen 变为不可见时,全部后代会一起退出布局计算、渲染、Tooltip 与交互;更深层后代也不会越过隐藏祖先单独显示。重新显示布局后,后代会按各自条件恢复。

适用场景

  • 面板整体移动时保持内部组件相对位置
  • 弹窗、卡片、菜单项和组合控件
  • 使用 parent.widthparent.height 制作内部响应式布局
  • 在其他布局中嵌套一组局部组件

通用配置

配置项编辑器名称类型默认值可选值或格式说明
idID字符串自动生成 layout_relative_N页面内唯一 ID子组件通过 parent 引用。
type类型只读字符串layout_relative固定值创建后不能修改。
parent父级字符串布局组件 ID可嵌套在其他布局中,不得形成循环。
z层级整数0任意整数布局自身的层级。
visible显示布尔值truetruefalse静态显隐开关。
enabled启用布尔值truetruefalse控制布局自身事件。
pointerEvents指针处理枚举autoautoblockpass配置事件或提示后 auto 命中;block 强制遮挡,pass 永远穿透。
dragMode拖拽枚举offofftemporaryremember关闭拖动、仅本次页面保留位置,或在本地记住布局位置。
visibleWhen显示条件条件表达式只读条件条件为假时不可见。
enabledWhen启用条件条件表达式只读条件条件为假时禁用。
tooltip多行提示字符串列表最多 32 行,每行最多 256 字符布局区域悬浮提示。
layout.xX数字或公式创建时画布位置合法布局公式父布局最终 X。
layout.yY数字或公式创建时画布位置合法布局公式父布局最终 Y。
layout.width数字或公式160合法布局公式父布局宽度。
layout.height数字或公式90合法布局公式父布局高度。
events.leftPress/rightPress/middlePress按下脚本ChaUI Script多行脚本对应按键按下时触发。
events.leftRelease/rightRelease/middleRelease松开脚本ChaUI Script多行脚本对应按键捕获仍有效并松开时触发。
events.leftClick左键脚本ChaUI Script多行脚本左键事件。
events.rightClick右键脚本ChaUI Script多行脚本右键事件。
events.middleClick中键脚本ChaUI Script多行脚本中键事件。
events.hoverEnter悬浮进入脚本ChaUI Script多行脚本鼠标进入时触发。
events.hoverLeave悬浮离开脚本ChaUI Script多行脚本鼠标离开时触发。

专属配置

配置项编辑器名称类型默认值可选值或格式说明
无额外字段相对布局的行为由通用布局矩形和子组件 parent 决定。

布局组件只组织坐标、裁剪和组件树,不使用根级 scaleopacity

布局组件可以通过 dragMode 让玩家整体移动这一组内容。拖动布局时,它的全部后代会一起显示在新位置,但原始布局公式和 parent 关系不会改变。temporary 只保留当前页面会话中的偏移;remember 会在松开后记住位置,下次打开同一页面继续使用。已有记忆即使后来改为 off 也会继续生效,直到脚本或管理员执行重置。

坐标行为

父布局位于 (100, 50) 时,直接子组件 x: 10y: 8 的最终位置是 (110, 58)。子组件宽高仍由自己的公式决定。

子组件公式中的 parent.xparent.y 是父布局最终坐标。通常内部定位只需填写局部数字;如果再次把 parent.x 加入子组件 X,会造成重复偏移。

配置示例

yaml
- id: dialog
  type: layout_relative
  parent: ""
  visible: true
  enabled: false
  z: 0
  layout:
    x: window.width * 0.5 - 100
    y: window.height * 0.5 - 60
    width: 200
    height: 120
  tooltip: []
  events: {}

- id: dialog_title
  type: text
  parent: dialog
  visible: true
  enabled: false
  z: 1
  layout:
    x: 10                  # 最终位置会自动叠加 dialog.x
    y: 8
    width: parent.width - 20
    height: 14
  text:
    value: 相对布局标题
    textSize: 1
    align: center

常见问题

子组件偏移了两次

相对布局已经自动叠加父布局位置。内部 X、Y 通常不要再写 parent.x + ...parent.y + ...

移动父布局后子组件是否需要逐个修改

不需要。直接子组件会跟随父布局整体移动,这正是相对布局的主要用途。