Skip to content
On this page

图片组件

图片组件用于在页面中显示本地图片或 GIF 动图,适合背景、图标、装饰、头像框和状态提示。素材由客户端从当前游戏版本目录的 resourcepacks/ChaUI/ 中读取。

适用场景

  • 页面背景与装饰图层
  • Logo、图标和状态标识
  • GIF 动画提示
  • 从整张素材中截取一块区域显示

图片路径始终填写相对于 resourcepacks/ChaUI/ 的路径,例如 gui/logo.png。支持 PNG、JPG、JPEG 和 GIF;路径不能使用绝对路径、反斜杠或 ..

通用配置

配置项编辑器名称类型默认值可选值或格式说明
idID字符串自动生成 image_N页面内唯一 ID用于脚本、父级绑定和状态更新。
type类型只读字符串image固定值创建后不能修改。
parent父级字符串布局组件 ID为空表示根级元素;不得引用普通组件或形成循环。
z层级整数0任意整数数值越大越晚绘制,通常显示在更上层。
visible显示布尔值truetruefalse静态控制组件是否显示。
enabled启用布尔值truetruefalse控制组件能否参与交互。
pointerEvents指针处理枚举autoautoblockpass纯图片默认穿透;配置事件/提示后 auto 命中,block 强制遮挡,pass 永远穿透。
scale缩放数字或公式1非负值以图片中心缩放画面和命中范围,不改变布局值。
opacity透明度数字或公式101控制图片透明度,不改变命中。
visibleWhen显示条件条件表达式只读条件条件为假时不显示;非法条件按不可见处理。
enabledWhen启用条件条件表达式只读条件条件为假时不响应事件。
tooltip多行提示字符串列表最多 32 行,每行最多 256 字符鼠标悬浮时显示的说明文字。
containerBinding容器绑定字符串当前容器的语义槽位 ID仅容器替换页面使用,可让组件读取绑定物品信息。
containerTooltip容器提示布尔值truetruefalse没有显式 tooltip 时是否显示绑定物品提示。
layout.xX数字或公式创建时画布位置10window.width * 0.5最终横坐标。
layout.yY数字或公式创建时画布位置20parent.y + 8最终纵坐标。
layout.width数字或公式80合法布局公式图片最终显示宽度。
layout.height数字或公式24合法布局公式图片最终显示高度。
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多行脚本鼠标离开组件范围时触发。

专属配置

配置项编辑器名称类型默认值可选值或格式说明
image.path图片路径字符串gui/image_N.pngChaUI 相对图片路径,可含 {表达式}当前显示的图片或 GIF。最终路径变化后会重新加载,GIF 从第 0 帧开始。
image.gifLoopGIF循环布尔值truetruefalse仅对 GIF 生效;关闭后播放一轮并停在最后一帧。
image.gifLoopCountGIF次数非负整数00 或正整数0 表示无限循环;正数表示播放指定轮数。
image.sourceX源X非负整数或公式像素坐标或数字公式源图选区左上角 X。
image.sourceY源Y非负整数或公式像素坐标或数字公式源图选区左上角 Y。
image.sourceWidth源宽非负整数或公式像素尺寸或数字公式源图选区宽度;为 0 时当前图片不绘制,与源高一起留空时使用整张图片。
image.sourceHeight源高非负整数或公式像素尺寸或数字公式源图选区高度;为 0 时当前图片不绘制,选区会缩放到组件宽高。

image.keyimage.texture 不属于当前图片组件字段,保存时会被拒绝。请只使用 image.path

图片路径可以跟随变量变化。例如 gui/{vars.theme}/logo.png 会在 vars.themeblue 时读取 gui/blue/logo.png。ChaUI 会在表达式求值后再次检查最终路径;如果结果为空、越过素材目录、使用反斜杠或扩展名不受支持,只让当前图片安全回退,不会让页面崩溃。

四个源图字段也可以填写 varsvalswindowparentself 和数学函数组成的公式。结果有小数时向下取整为源图像素;结果为负数、非有限值、未知变量或选区越界时只跳过当前图片。制作动态图集和无拉伸血条请先阅读图片裁剪与动态血条

配置示例

先在页面根级 vars 中加入 theme: default,再把下面组件放入 elements。这样更换 vars.theme 时会自动读取另一套素材目录。

yaml
- id: logo
  type: image
  parent: ""
  visible: true
  enabled: true
  pointerEvents: auto
  scale: 1
  opacity: 0.9
  z: 10
  layout:
    x: window.width * 0.5 - 64
    y: 20
    width: 128
    height: 64
  image:
    path: gui/{vars.theme}/logo.gif # theme 变化时自动换图
    gifLoop: true               # 允许循环
    gifLoopCount: 0             # 0 表示无限循环
    sourceX: 0                  # 从源图左上角开始
    sourceY: 0
    sourceWidth: 256            # 截取 256×128 区域
    sourceHeight: 128
  tooltip:
    - 服务器 Logo
  events: {}

脚本可以读取图片对象当前使用的路径。把下面的完整事件块替换到 logo 组件中,悬浮时会把路径保存到页面变量并显示在本地日志中:

yaml
events:
  hoverEnter: |-
    vars.logoPath = component("logo").image.path
    log("当前 Logo:{vars.logoPath}")

源图字段可以在当前页面会话中读取、固定赋值或绑定公式:

yaml
events:
  leftClick: |-
    component("logo").image.sourceWidth = formula(vars.visiblePixels)
    vars.currentWidth = component("logo").image.sourceWidth
    vars.widthFormula = component("logo").image.expression("sourceWidth").source

直接赋数字会清除旧公式;formula(...) 会继续跟随变量。脚本修改不会写回服务端页面文件。

常见问题

图片显示为缺失素材

检查文件是否存在于当前客户端的 resourcepacks/ChaUI/,并逐字核对路径、扩展名和大小写。ChaUI 不会从服务端自动下载素材。

GIF 修改路径后为什么重新播放

每次打开页面和每次动态修改图片路径都会建立新的播放作用域,这是预期行为。

只想显示素材的一部分

同时填写源 X、源 Y、源宽和源高。选区越界或尺寸非法时,组件会安全跳过图片绘制。

创建事件

图片组件支持 events.create,适合在组件出现时根据变量选择初始路径、显隐或尺寸。页面初始图片与脚本动态创建的图片都会对各自实例触发一次;隔离预览中的变化不会保存。