GUI:addOnClickEvent(npc.ui.donate_btn, function()
-- 创建独立的输入框窗口,而不是作为npc.ui.bg的子节点
local inputWindow = GUI:Win_Create("DonateInputWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建背景图
local inPut_mainBg = GUI:
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-30 00:56:25 |
👁️ 阅读: 7
根据浮生梦老师前端课程内容,你的代码有几个关键问题需要解决:
1. **按钮显示问题**:`npc.ui.donate_btn` 如果放在其他父节点下,它不会随 `npc.ui.bg` 一起隐藏。你需要确保它们有相同的父节点或手动控制显示状态。
2. **窗口创建时机**:每次点击都创建新窗口会导致内存泄漏,应该复用窗口。
3. **坐标问题**:`GUI:Win_Create` 的坐标参数为 0 会导致窗口位置异常。
这是修改后的代码:
```lua
GUI:addOnClickEvent(npc.ui.donate_btn, function()
-- 先检查是否已有输入窗口,避免重复创建
local inputWindow = GUI:getChildByName(npc.ui.bg, "DonateInputWindow")
if GUI:Win_IsNull(inputWindow) then
-- 创建窗口作为 npc.ui.bg 的子节点
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
local centerX = screenW / 2 - 177 -- 355/2
local centerY = screenH / 2 - 82 -- 165/2
inputWindow = GUI:Win_Create("DonateInputWindow", centerX, centerY, 355, 165,
false, false, true, false, false, false, 1)
-- 将窗口添加到 npc.ui.bg 的子节点
GUI:Widget_AddChild(npc.ui.bg, inputWindow)
-- 创建背景图
local inPut_mainBg = GUI:Image_Create(inputWindow, "inPut_mainBg", 0, 0, "res/public/1900000610799.png")
GUI:setContentSize(inPut_mainBg, 355, 165)
-- 创建确定按钮
local inPut_btn1 = GUI:Button_Create(inPut_mainBg, "inPut_btn1", 160, 15, "res/public/1900001003.png")
-- 创建取消按钮
local inPut_btn2 = GUI:Button_Create(inPut_mainBg, "inPut_btn2", 260, 15, "res/public/1900001005.png")
-- 创建提示文字
local inPut_text = GUI:Text_Create(inPut_mainBg, "inPut_text", 20, 125, 16, "#ffffff", "请输入您要捐献的数量:")
-- 创建输入框背景
local inPut_bg = GUI:Image_Create(inPut_mainBg, "inPut_bg", 95, 75, "res/public/1900015004.png")
-- 创建输入框
local inPut = GUI:TextInput_Create(inPut_bg, "inPut", 0, 0, 220, 40, 16)
GUI:TextInput_setInputMode(inPut, 5)
-- 确定按钮点击事件
GUI:addOnClickEvent(inPut_btn1, function()
local sure_bg = GUI:Image_Create(inPut_mainBg, "sure_bg", -80, 20, "res/public_win32/000360.png")
-- 这里可以添加确定后的逻辑
end)
-- 取消按钮点击事件
GUI:addOnClickEvent(inPut_btn2, function()
-- 隐藏输入窗口而不是关闭
GUI:setVisible(inputWindow, false)
end)
-- 初始隐藏输入窗口
GUI:setVisible(inputWindow, false)
end
-- 点击捐赠按钮时显示输入窗口
GUI:setVisible(inputWindow, true)
end)
```
**关键修改点:**
1. **使用 `GUI:Widget_AddChild()`** 将输入窗口添加为 `npc.ui.bg` 的子节点
2. **窗口位置居中计算**:根据屏幕尺寸计算居中位置
3. **窗口复用**:先检查是否已存在,避免重复创建
4. **隐藏而非关闭**:取消按钮使用 `GUI:setVisible(inputWindow, false)` 而不是 `GUI:Win_Close()`
5. **按钮显示控制**:`npc.ui.donate_btn` 现在和 `npc.ui.bg` 有相同的父节点关系
这样当 `npc.ui.bg` 被隐藏时,`npc.ui.donate_btn` 和输入窗口都会一起被隐藏,点击按钮时又能正常显示输入窗口。
← 返回问答库