SL:print("=========GUI加载成功!")
local GUI = GUI
function GUI:addfunchhhhhhhhhhhhh()
SL:print("打印出的信息")
end
---打开npc界面
function GUI:npcUI(uiname)
local w ,h = SL:GetMetaValue("SCREEN_WIDTH") ,SL:GetMetaValue("SCREEN_HEIGHT")---获取元变量的宽和高
根据浮生梦老师前端课程内容分析,你的代码存在几个关键问题导致无法关闭界面:
**主要问题分析:**
1. **界面创建方式不正确** - 你使用的是 `GUI:Attach_LeftBottom()`,但这不是正确的窗口创建方式
2. **关闭事件处理有问题** - 虽然设置了关闭按钮点击事件,但界面本身可能没有被正确创建为窗口
**修正后的代码:**
```lua
SL:print("=========GUI加载成功!")
local GUI = GUI
---打开npc界面(修正版)
function GUI:npcUI(uiname)
-- 获取屏幕尺寸
local w = SL:GetMetaValue("SCREEN_WIDTH")
local h = SL:GetMetaValue("SCREEN_HEIGHT")
-- 使用正确的窗口创建方式
local root = GUI:Win_Create("NPC_Window", 0, 0, w, h, false, false, true, false, false, false, 1)
-- 加载UI界面
GUI:LoadExport(root, "NPC/"..uiname)
-- 获取父节点下的所有组件
local ui = GUI:ui_delegate(root)
-- 检查背景组件
if not ui.ImageView then
error("你把背景唯一id改成ImageView")
end
if ui.ImageView then
GUI:setTouchEnabled(ui.ImageView, true)
GUI:Win_SetSwallowRightMouseTouch(ui.ImageView, true)
end
-- 检查关闭按钮
if not ui.guanbi then
error("你把关闭按钮唯一id改成guanbi")
end
if ui.guanbi then
GUI:addOnClickEvent(ui.guanbi, function()
-- 先判断窗口是否有效再关闭
if not GUI:Win_IsNull(root) then
GUI:Win_Close(root)
SL:print("界面已关闭")
end
end)
end
return ui, root
end
function GUI:onclick(widget, func)
SL:print(tolua.type(widget))
GUI:setTouchEnabled(widget, true)
GUI:addOnClickEvent(widget, func)
end
-- 设置锚点
function GUI:maodian(widget, x, y)
GUI:setAnchorPoint(widget, x or 0.5, y or 0.5)
end
return GUI
```
**关键修改点:**
1. **`GUI:Attach_LeftBottom()` 改为 `GUI:Win_Create()`**:
- `GUI:Attach_LeftBottom()` 可能只是获取或创建锚点节点,不是真正的窗口
- `GUI:Win_Create()` 才是创建窗口的正确方式
2. **添加了窗口有效性检查**:
```lua
if not GUI:Win_IsNull(root) then
GUI:Win_Close(root)
end
```
3. **正确的窗口参数**:
- 使用屏幕宽高作为窗口尺寸
- 设置了窗口的基本属性
**测试建议:**
1. 确保你的NPC界面文件路径正确
2. 确认关闭按钮的唯一ID确实是"guanbi"
3. 检查关闭按钮是否被其他控件遮挡
如果还是无法关闭,请检查:
- 关闭按钮的触摸事件是否被其他父节点拦截
- 是否有其他代码在干扰关闭操作
- 使用 `SL:print()` 在关闭事件中添加调试信息
不懂的地方可以问浮生梦尊师!