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:38:42 |
👁️ 阅读: 4
你的代码在第46行出现了 `target is nil value` 错误。根据浮生梦老师前端课程内容,`GUI:addOnClickEvent` 的第一个参数必须是有效的控件对象。
**问题分析:**
1. **控件未创建或获取失败**:你试图给 `npc.ui.inPut_btn1` 绑定点击事件,但这个控件可能不存在。
2. **创建时机问题**:你在 `npc.ui.donate_btn` 的点击事件里创建了 `win_TextInput` 及其子控件,但绑定 `inPut_btn1` 点击事件时,这些控件可能还没创建完成,或者 `npc.ui.inPut_btn1` 这个路径是错误的。
**具体问题:**
在 `GUI:addOnClickEvent(npc.ui.inPut_btn1, function() ... end)` 这行代码中,`npc.ui.inPut_btn1` 是 `nil`。因为:
- `inPut_btn1` 是创建在 `win_TextInput.inPut_mainBg` 这个节点下的
- 而 `npc.ui` 是 `win_donate` 界面的代理对象,它不包含 `win_TextInput` 的控件
**修正方案:**
你需要直接引用 `win_TextInput.inPut_btn1` 这个控件对象来绑定事件:
```lua
GUI:addOnClickEvent(win_TextInput.inPut_btn1, function()
-- 在这里创建确认背景
GUI:Image_Create(win_TextInput.inPut_mainBg, "sure_bg", -80, 20, "res/public_win32/000360.png")
end)
```
**完整修正后的 `npc:openWin()` 函数部分代码:**
```lua
function npc:openWin()
-- 创造外部界面
local win_donate = GUI:Win_Create("win_donate", 0, 0, 0, 0)
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)
GUI:setVisible(win_TextInput.bg, false)
-- 创建输入框背景
GUI:Image_Create(win_TextInput.bg, "inPut_mainBg", 165, 150, "res/public/1900000610799.png")
GUI:setContentSize(win_TextInput.inPut_mainBg, 355, 165)
-- 创建按钮
GUI:Button_Create(win_TextInput.inPut_mainBg, "inPut_btn1", 160, 15, "res/public/1900001003.png")
GUI:Button_Create(win_TextInput.inPut_mainBg, "inPut_btn2", 260, 15, "res/public/1900001005.png")
-- 创建文本
GUI:Text_Create(win_TextInput.inPut_mainBg, "inPut_text", 20, 125, 16, "#ffffff", "请输入您要捐献的数量:")
-- 创建输入框背景和输入框
GUI:Image_Create(win_TextInput.inPut_mainBg, "inPut_bg", 95, 75, "res/public/1900015004.png")
GUI:TextInput_Create(win_TextInput.inPut_bg, "inPut", 0, 0, 220, 40, 16)
GUI:TextInput_setInputMode(win_TextInput.inPut, 5)
-- 正确绑定确定按钮的点击事件
GUI:addOnClickEvent(win_TextInput.inPut_btn1, function()
-- 创建确认背景
GUI:Image_Create(win_TextInput.inPut_mainBg, "sure_bg", -80, 20, "res/public_win32/000360.png")
end)
-- 也可以绑定取消按钮
GUI:addOnClickEvent(win_TextInput.inPut_btn2, function()
GUI:Win_Close(win_TextInput)
end)
end)
end
```
**关键点:**
- `win_TextInput` 是一个独立的窗口,它的控件需要通过 `win_TextInput.控件名` 来访问
- `npc.ui` 只包含 `win_donate` 窗口的控件,不包含其他窗口的控件
- 确保在控件创建完成后才绑定事件
这样修改后,第46行的错误就应该解决了。下次写代码时要注意控件的层级关系,不懂的可以问浮生梦尊师!
← 返回问答库