课时 30 · 客户端进阶:窗口与事件

课时 30 · 客户端进阶:窗口与事件(高级进阶与开服):掌握客户端界面开发核心。示例跑在 996 新三端引擎里,接口按本地官方文档逐个核对。

教程/第五部分 · 高级进阶与开服更新于 2026-10-079 个小节 教程第 36 / 41 篇 进阶开服

本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。

本课目标

  • 掌握客户端界面开发核心。

知识讲解

客户端脚本以 SL:/GUI: 命名空间工作:GUI: 负责窗口控件(创建/获取/设置/容器/操作/动作 600+ 接口),SL: 负责事件注册、元变量读写等全局能力。一个界面功能 = 创建控件 + 注册事件 + 读写元变量 + 界面开关。

创建控件

知识讲解

GUI:Button_Create(parent, ID, X, Y, nimg) 创建按钮控件:parent 为父对象,ID 为控件标识(字符串),X/Y 为坐标,nimg 为按钮贴图路径,返回 userdata 控件对象。

示例:创建按钮

local Btn = GUI:Button_Create(parent, 'BtnOk', 0, 0, 'res/public/061101.JPG')

来源:本地文档 窗口\创建\创建按钮控件.md。

GUI:Image_loadTexture(widget, filepath) 给图片控件加载纹理贴图;窗口控件体系还有容器(把子控件挂到面板)、动作(显隐/移动/动画)等分类,均以 GUI: 前缀的函数提供。

示例:加载纹理

path = 'btn_jnkan_01.png'
GUI:Image_loadTexture(img, path)

来源:本地文档 窗口\设置\加载纹理图片.md。

注册事件

知识讲解

SL:RegisterLUAEvent(eventID, eventTag, eventCB, widget) 注册游戏事件回调:eventID 为事件 ID(事件列表见在线文档),eventTag 为自定义标识(同一 eventID 下唯一,注销时匹配用),eventCB 为回调函数,widget 为界面对象(传入后界面关闭时自动注销回调)。对应注销用 SL:UnRegisterLUAEvent。

示例:注册升级事件回调

function shuxing(data)
    -- 升级后刷新属性
end

SL:RegisterLUAEvent('LUA_EVENT_ONPLAYLEVELUP', '属性刷新', shuxing)

来源:本地文档 游戏\游戏事件函数\注册游戏事件回调.md。

元变量读写

知识讲解

元变量是客户端内置的状态量,用 SL:Get_xxx 读取、SL:Set_xxx 写入。例如 SL:Get_X() 返回人物当前坐标 X。元变量覆盖角色相关、背包、技能、宠物、当前地图等约 20 类,是客户端脚本感知游戏状态的入口。

示例:读取坐标元变量

local x = SL:Get_X()
SL:Print(string.format('人物当前坐标X | Get_X | %s = %s', type(x), tostring(x)))

来源:本地文档 元变量\角色相关\人物当前坐标X.md。

练习任务

  • 自定义技能面板:创建一个带按钮的面板;按钮点击时注册事件播放技能特效并刷新元变量;界面关闭时事件自动注销。

参考:验收要点

  • GUI:Button_Create 创建按钮并挂到面板容器;
  • SL:RegisterLUAEvent 注册点击事件,回调触发技能逻辑;
  • 界面关闭后事件不再触发(widget 自动注销或手动 UnRegister);
  • 元变量读写函数名与本地文档一致。
本篇依据
  • 《996 新三端 Lua 开发教学技术手册》课时 30
  • 本地文档 窗口\创建\创建按钮控件.md
  • 本地文档 窗口\设置\加载纹理图片.md
  • 本地文档 游戏\游戏事件函数\注册游戏事件回调.md
  • 本地文档 元变量\角色相关\人物当前坐标X.md

参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。