local npcb = {}
function npcb:main()
local parent1 = GUI:Win_Create("npcb_",100, 100, 0, 0, false, false, true, true, true, 0, 1)
npcb.bg = GUI:Layout_Create(parent1, "Layout", 0.00, 0.00, 550.00, 400.00, false)
local bt = GUI:Image_Creat
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-11 15:58:00 |
👁️ 阅读: 0
要实现点击抽取按钮时服务端扣除货币并客户端实时显示,需要以下几个步骤:
## 1. 服务端通信
```lua
GUI:addOnClickEvent(chouquyici, function()
-- 发送消息到服务端,参数根据实际需求调整
-- 1111: 消息ID,p2: 参数2,p3: 参数3
SL:SendLuaNetMsg(1111, 1, 0, 0, "抽取一次")
end)
GUI:addOnClickEvent(chouqushici, function()
SL:SendLuaNetMsg(1111, 2, 0, 0, "抽取十次")
end)
```
## 2. 注册货币变化事件
```lua
-- 在界面初始化时注册事件
function npcb:main()
-- ... 其他代码 ...
-- 注册货币变化事件
SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, "货币变化", npcb.onMoneyChange)
end
-- 货币变化回调函数
function npcb.onMoneyChange()
-- 获取货币数量
local moneyCount = SL:GetMetaValue("MONEY", 13) -- 13是货币ID
-- 更新显示
if npcb.bg and not GUI:Win_IsNull(npcb.bg) then
local moneyText = GUI:getChildByName(npcb.bg, "chongzhiedu")
if moneyText then
GUI:Text_setString(moneyText, "充值额度:" .. tostring(moneyCount))
end
end
end
```
## 3. 完整示例代码
```lua
local npcb = {}
function npcb:main()
local parent1 = GUI:Win_Create("npcb_", 100, 100, 0, 0, false, false, true, true, true, 0, 1)
npcb.bg = GUI:Layout_Create(parent1, "Layout", 0.00, 0.00, 550.00, 400.00, false)
local bt = GUI:Image_Create(npcb.bg, "img_bj", 180, 100, "res/custom/ty_mb.png")
local gb = GUI:Button_Create(bt, "gb", 700, 470, "res/custom/close.png")
GUI:setOpacity(bt, 0)
GUI:Timeline_FadeIn(bt, 0.5, function() end)
-- 创建物品展示
local wp_x = {98,161,223,285,348,413,475,537,600,662}
local wp_y = {286}
for i = 1, 10 do
GUI:ItemShow_Create(bt, "ID"..i, wp_x[i], wp_y[1],
{index = 10460-i, look = true, bgVisible = true, count = 1})
end
-- 创建按钮
local chouquyici = GUI:Button_Create(bt, "chouquyici", 223, 100, "res/public/000000100.png")
GUI:Button_setTitleText(chouquyici, "抽取一次")
local chouqushici = GUI:Button_Create(bt, "chouqushici", 537, 100, "res/public/000000100.png")
GUI:Button_setTitleText(chouqushici, "抽取十次")
-- 创建货币显示文本
local chongzhiedu = GUI:Text_Create(bt, "chongzhiedu", 98, 186, 16, "#ffffff",
"充值额度:" .. tostring(SL:GetMetaValue("MONEY", 13)))
-- 按钮事件
GUI:addOnClickEvent(chouquyici, function()
SL:SendLuaNetMsg(1111, 1, 0, 0, "抽取一次")
end)
GUI:addOnClickEvent(chouqushici, function()
SL:SendLuaNetMsg(1111, 2, 0, 0, "抽取十次")
end)
GUI:addOnClickEvent(gb, function()
GUI:Win_Close(parent1)
end)
-- 注册货币变化事件
SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, "货币变化", npcb.onMoneyChange)
end
-- 货币变化处理函数
function npcb.onMoneyChange()
local moneyCount = SL:GetMetaValue("MONEY", 13)
if npcb.bg and not GUI:Win_IsNull(npcb.bg) then
local moneyText = GUI:getChildByName(npcb.bg, "chongzhiedu")
if moneyText then
GUI:Text_setString(moneyText, "充值额度:" .. tostring(moneyCount))
end
end
end
-- 界面关闭时清理
function npcb:onClose()
-- 取消事件注册
SL:UnregisterLUAEvent(LUA_EVENT_MONEYCHANGE, npcb.onMoneyChange)
end
```
## 关键点说明:
1. **服务端通信**:使用 `SL:SendLuaNetMsg` 发送消息到服务端
2. **事件注册**:使用 `SL:RegisterLUAEvent` 注册货币变化事件
3. **实时更新**:在事件回调中获取最新货币值并更新UI
4. **内存管理**:界面关闭时记得取消事件注册
注意:`LUA_EVENT_MONEYCHANGE` 是浮生梦老师前端课程中定义的货币变化事件常量,具体事件ID需要根据实际项目配置确定。
← 返回问答库