local npc = {}
local function networkCB(msgID, p1, p2, p3, msgData)
SL:print("===== 收到后端消息 =====")
SL:print("消息ID: " .. tostring(msgID))
SL:print("参数1: " .. tostring(p1))
SL:print("参数2: " .. tostring(p2))
SL:print("参数3: " .. to
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-03 19:16:10 |
👁️ 阅读: 3
你的代码中`npc.img_status`在`npc:openWin()`函数里才被赋值,但在`npc:turn()`函数中可能还没有初始化。根据浮生梦老师前端课程内容,需要确保`npc.img_status`在使用前有默认值。
**问题分析:**
1. `npc.img_status`只在按钮点击事件中设置,第一次调用`npc:turn()`时可能为nil
2. 在`npc:openWin()`函数中没有初始化`npc.img_status`
**修改方案:**
```lua
function npc:openWin()
-- 创造外部界面
local win_zhuanpan = GUI:Win_Create("win_zhuanpan", 0, 0, 0, 0)
GUI:LoadExport(win_zhuanpan, "playernpc/zhuanpan")
npc.ui = GUI:ui_delegate(win_zhuanpan)
-- 初始化img_status状态值
npc.img_status = 0 -- 添加这行,设置默认值
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_zhuanpan)
end)
-- 转动1次
GUI:addOnClickEvent(npc.ui.Button_1, function ()
SL:SendLuaNetMsg(1028, 28, 1, 0, "转盘")
npc:turn()
end)
-- 转动10次
GUI:addOnClickEvent(npc.ui.Button_10, function ()
SL:SendLuaNetMsg(1028, 28, 10, 0, "转盘")
npc:turn()
end)
-- 取消动画
GUI:addOnClickEvent(npc.ui.Button_effect, function ()
if npc.img_status == 1 then
GUI:Image_loadTexture(npc.ui.effect, "res/public/1900000550.png")
npc.img_status = 0
else
GUI:Image_loadTexture(npc.ui.effect, "res/public/1900000551.png")
npc.img_status = 1
end
end)
end
-- 转盘特效
function npc:turn()
-- 添加nil值检查
local status = npc.img_status or 0
SL:print("当前图片状态值:", status)
end
```
**函数说明:**
- `GUI:ui_delegate(widget)`:获取控件的UI委托对象
- `GUI:LoadExport(parent, "exportName")`:加载导出的UI界面
- `SL:SendLuaNetMsg(msgID, p1, p2, p3, msgData)`:发送网络消息到服务端
**注意点:**
1. 在`npc:openWin()`函数开始时添加`npc.img_status = 0`初始化
2. 在`npc:turn()`函数中使用`or`运算符处理可能的nil值
3. 确保所有变量在使用前都有合理的默认值
这样修改后,`npc.img_status`在第一次调用时就有默认值0,不会出现nil值错误。
← 返回问答库