SL:print("打开沙城捐献界面")
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))
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-30 01:45:43 |
👁️ 阅读: 6
这段代码有几个关键问题需要修正:
1. **父节点创建时机错误**:`win_TextInput`窗口是空的,创建子控件前需要先创建界面结构
2. **父节点引用错误**:`win_TextInput.inPut_mainBg`在创建前就被引用
3. **缺少错误处理**:没有检查控件是否创建成功
以下是修正后的代码:
```lua
SL:print("打开沙城捐献界面")
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: " .. tostring(p3))
SL:print("字符串: " .. tostring(msgData))
SL:print("=======================")
if msgID == 1017 and msgData == "沙城捐献" then
if p3 == 0 then
npc:openWin()
end
end
end
function npc:openWin()
-- 创建主界面
local win_donate = GUI:Win_Create("win_donate", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:LoadExport(win_donate, "donate")
npc.ui = GUI:ui_delegate(win_donate)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_donate)
end)
-- 设置问号悬停提示
GUI:addMouseOverTips(npc.ui.hint_btn, "str", {x = 0, y = -55}, {x = 0.5, y = 0.5}, nil)
-- 设置输入框弹窗
GUI:addOnClickEvent(npc.ui.donate_btn, function()
-- 创建输入弹窗窗口
local win_TextInput = GUI:Win_Create("win_TextInput", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 先创建主背景图
local mainBg = GUI:Image_Create(win_TextInput, "inPut_mainBg", 165, 150, "res/public/1900000610799.png")
if GUI:Win_IsNull(mainBg) then
SL:print("创建主背景图失败")
return
end
GUI:setContentSize(mainBg, 355, 165)
-- 创建确定按钮
local btn1 = GUI:Button_Create(mainBg, "inPut_btn1", 160, 15, "res/public/1900001003.png")
if not GUI:Win_IsNull(btn1) then
GUI:Button_setTitleText(btn1, "确定")
end
-- 创建取消按钮
local btn2 = GUI:Button_Create(mainBg, "inPut_btn2", 260, 15, "res/public/1900001005.png")
if not GUI:Win_IsNull(btn2) then
GUI:Button_setTitleText(btn2, "取消")
GUI:addOnClickEvent(btn2, function()
GUI:Win_Close(win_TextInput)
GUI:setVisible(npc.ui.bg, true)
end)
end
-- 创建提示文本
GUI:Text_Create(mainBg, "inPut_text", 20, 125, 16, "#ffffff", "请输入您要捐献的数量:")
-- 创建输入框背景
local inputBg = GUI:Image_Create(mainBg, "inPut_bg", 95, 75, "res/public/1900015004.png")
if not GUI:Win_IsNull(inputBg) then
-- 创建输入框
local input = GUI:TextInput_Create(inputBg, "inPut", 0, 0, 220, 40, 16)
if not GUI:Win_IsNull(input) then
GUI:TextInput_setInputMode(input, 5)
GUI:TextInput_setPlaceHolder(input, "输入数量")
end
end
GUI:setVisible(npc.ui.bg, false)
end)
end
SL:RegisterLuaNetMsg(1017, networkCB)
```
**主要修正点:**
1. **正确的父节点创建**:使用完整的`GUI:Win_Create`参数创建窗口
2. **顺序创建**:先创建父控件,再创建子控件
3. **错误检查**:使用`GUI:Win_IsNull()`检查控件是否创建成功
4. **按钮功能**:为取消按钮添加关闭弹窗功能
下次创建界面时记住:**先有父,后有子**,每个控件创建后都要检查是否成功!
← 返回问答库