图片组件
图片组件用于在页面中显示本地图片或 GIF 动图,适合背景、图标、装饰、头像框和状态提示。素材由客户端从当前游戏版本目录的 resourcepacks/ChaUI/ 中读取。
适用场景
- 页面背景与装饰图层
- Logo、图标和状态标识
- GIF 动画提示
- 从整张素材中截取一块区域显示
图片路径始终填写相对于 resourcepacks/ChaUI/ 的路径,例如 gui/logo.png。支持 PNG、JPG、JPEG 和 GIF;路径不能使用绝对路径、反斜杠或 ..。
通用配置
| 配置项 | 编辑器名称 | 类型 | 默认值 | 可选值或格式 | 说明 |
|---|---|---|---|---|---|
id | ID | 字符串 | 自动生成 image_N | 页面内唯一 ID | 用于脚本、父级绑定和状态更新。 |
type | 类型 | 只读字符串 | image | 固定值 | 创建后不能修改。 |
parent | 父级 | 字符串 | 空 | 布局组件 ID | 为空表示根级元素;不得引用普通组件或形成循环。 |
z | 层级 | 整数 | 0 | 任意整数 | 数值越大越晚绘制,通常显示在更上层。 |
visible | 显示 | 布尔值 | true | true、false | 静态控制组件是否显示。 |
enabled | 启用 | 布尔值 | true | true、false | 控制组件能否参与交互。 |
pointerEvents | 指针处理 | 枚举 | auto | auto、block、pass | 纯图片默认穿透;配置事件/提示后 auto 命中,block 强制遮挡,pass 永远穿透。 |
scale | 缩放 | 数字或公式 | 1 | 非负值 | 以图片中心缩放画面和命中范围,不改变布局值。 |
opacity | 透明度 | 数字或公式 | 1 | 0 至 1 | 控制图片透明度,不改变命中。 |
visibleWhen | 显示条件 | 条件表达式 | 空 | 只读条件 | 条件为假时不显示;非法条件按不可见处理。 |
enabledWhen | 启用条件 | 条件表达式 | 空 | 只读条件 | 条件为假时不响应事件。 |
tooltip | 多行提示 | 字符串列表 | 空 | 最多 32 行,每行最多 256 字符 | 鼠标悬浮时显示的说明文字。 |
containerBinding | 容器绑定 | 字符串 | 空 | 当前容器的语义槽位 ID | 仅容器替换页面使用,可让组件读取绑定物品信息。 |
containerTooltip | 容器提示 | 布尔值 | true | true、false | 没有显式 tooltip 时是否显示绑定物品提示。 |
layout.x | X | 数字或公式 | 创建时画布位置 | 如 10、window.width * 0.5 | 最终横坐标。 |
layout.y | Y | 数字或公式 | 创建时画布位置 | 如 20、parent.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.png | ChaUI 相对图片路径,可含 {表达式} | 当前显示的图片或 GIF。最终路径变化后会重新加载,GIF 从第 0 帧开始。 |
image.gifLoop | GIF循环 | 布尔值 | true | true、false | 仅对 GIF 生效;关闭后播放一轮并停在最后一帧。 |
image.gifLoopCount | GIF次数 | 非负整数 | 0 | 0 或正整数 | 0 表示无限循环;正数表示播放指定轮数。 |
image.sourceX | 源X | 非负整数或公式 | 空 | 像素坐标或数字公式 | 源图选区左上角 X。 |
image.sourceY | 源Y | 非负整数或公式 | 空 | 像素坐标或数字公式 | 源图选区左上角 Y。 |
image.sourceWidth | 源宽 | 非负整数或公式 | 空 | 像素尺寸或数字公式 | 源图选区宽度;为 0 时当前图片不绘制,与源高一起留空时使用整张图片。 |
image.sourceHeight | 源高 | 非负整数或公式 | 空 | 像素尺寸或数字公式 | 源图选区高度;为 0 时当前图片不绘制,选区会缩放到组件宽高。 |
image.key 与 image.texture 不属于当前图片组件字段,保存时会被拒绝。请只使用 image.path。
图片路径可以跟随变量变化。例如 gui/{vars.theme}/logo.png 会在 vars.theme 为 blue 时读取 gui/blue/logo.png。ChaUI 会在表达式求值后再次检查最终路径;如果结果为空、越过素材目录、使用反斜杠或扩展名不受支持,只让当前图片安全回退,不会让页面崩溃。
四个源图字段也可以填写 vars、vals、window、parent、self 和数学函数组成的公式。结果有小数时向下取整为源图像素;结果为负数、非有限值、未知变量或选区越界时只跳过当前图片。制作动态图集和无拉伸血条请先阅读图片裁剪与动态血条。
配置示例
先在页面根级 vars 中加入 theme: default,再把下面组件放入 elements。这样更换 vars.theme 时会自动读取另一套素材目录。
- 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 组件中,悬浮时会把路径保存到页面变量并显示在本地日志中:
events:
hoverEnter: |-
vars.logoPath = component("logo").image.path
log("当前 Logo:{vars.logoPath}")源图字段可以在当前页面会话中读取、固定赋值或绑定公式:
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,适合在组件出现时根据变量选择初始路径、显隐或尺寸。页面初始图片与脚本动态创建的图片都会对各自实例触发一次;隔离预览中的变化不会保存。
猹件开发组