SL:print("打开沙城捐献界面")
local npc = {}
-- 定义称号对应表
npc.rankTitle = {
[1] = "至尊",
[2] = "战神",
[3] = "枭雄",
[4] = "猛将",
[5] = "忠勇"
}
-- 玩家职业
npc.job ={
[0] = "战士",
[1] = "法师",
[2] = "道士"
}
function npc:openWin(msgID, p1
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-17 19:03:24 |
👁️ 阅读: 10
根据浮生梦老师前端课程内容,我来分析一下你的代码:
## 主要问题分析
### 1. **逻辑结构错误**
你的代码中 `if p2 == 1` 和后续的判断逻辑都放在了 `npc:openWin` 函数外面,这会导致这些代码在界面加载时就会执行,而不是在收到后端消息时执行。
**正确做法**:应该把这些判断逻辑放在 `npc:openWin` 函数内部。
### 2. **函数作用域问题**
```lua
-- 错误:inputMoney 在函数外部定义,在函数内部使用
inputMoney = GUI:TextInput_getString(npc.ui.inPut)
-- 正确:应该在函数内部定义和使用
local inputMoney = GUI:TextInput_getString(npc.ui.inPut)
```
### 3. **代码结构优化建议**
```lua
function npc:openWin(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: " .. tostring(p3))
SL:print("字符串: " .. tostring(msgData))
SL:print("=======================")
-- 创造外部界面
if p2 == 0 then
-- 创建界面代码...
-- 注意:这里需要定义 inputMoney 为局部变量
local inputMoney = ""
-- 设置输入框按钮事件
GUI:addOnClickEvent(npc.ui.donate_btn, function()
GUI:setVisible(npc.ui.firstBg, false)
GUI:setVisible(npc.ui.secondBg, true)
GUI:setVisible(npc.ui.thirdBg, false)
GUI:TextInput_Create(npc.ui.inPut_bg, "inPut", 0, 0, 220, 40, 16)
GUI:TextInput_setInputMode(npc.ui.inPut, 5)
end)
-- 设置二级确定按钮
GUI:addOnClickEvent(npc.ui.inPut_btn1, function()
inputMoney = GUI:TextInput_getString(npc.ui.inPut)
SL:SendLuaNetMsg(2017, 17, 1, 0, inputMoney)
end)
elseif p2 == 1 then
SL:ShowSystemTips("请输入正确的捐献数量!")
return
elseif p2 == 2 then
-- 这里需要确保 npc.ui 已经定义
if npc.ui then
GUI:Text_setString(npc.ui.makeSure_text, "您确定要捐献"..inputMoney.."个金币吗")
GUI:setVisible(npc.ui.firstBg, false)
GUI:setVisible(npc.ui.secondBg, false)
GUI:setVisible(npc.ui.thirdBg, true)
end
-- ... 其他判断条件
end
end
```
### 4. **重要提醒**
- 确保所有界面操作都在 `npc.ui` 已经初始化的情况下进行
- 使用局部变量存储临时数据
- 注意代码的作用域和生命周期
你的代码思路是正确的,只是需要调整一下代码结构。把所有的 `if p2 == x` 判断都放到 `npc:openWin` 函数内部,确保它们只在收到后端消息时执行。
下次写代码时要注意函数的作用域和代码结构,这样可以避免很多常见的错误!如果有不明白的地方可以随时问浮生梦老师!
← 返回问答库