SL:print("打开图鉴界面")
local npc = {}
npc.config = {
-- 套装1:烈焰战神
[1] = {
name = "烈焰战神",
itemsIdx = {50037, 50038, 50039, 50040, 50041},
itemsName = {"屠龙", "骨玉权杖", "裁决之杖", "凝血", "霸者之刃"},
attrs = {
{id
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-12 09:47:07 |
👁️ 阅读: 16
根据浮生梦老师前端课程内容,你的代码中按钮触摸问题主要出现在按钮创建和事件绑定的逻辑结构上。以下是修正后的关键部分:
```lua
-- 在openWin函数中,修改按钮创建和事件处理逻辑
function npc:openWin()
-- ... 前面的代码保持不变 ...
-- 创建图鉴按钮
local nowPage = 1
local totalPage = math.ceil(25/18)
local pageContainers = {}
local selectBtn = nil
-- 先创建所有页面容器
for page = 1, totalPage do
local IG_turnPage = GUI:Layout_Create(npc.ui.btn_Layout, "turnThePage"..page, 0, 0, 230, 400)
GUI:Layout_setBackGroundColor(IG_turnPage, "#FF0000")
GUI:Layout_setBackGroundColorType(IG_turnPage, 1)
GUI:setTouchEnabled(IG_turnPage, true)
GUI:setVisible(IG_turnPage, page == 1)
pageContainers[page] = IG_turnPage
end
-- 为每个配置项创建按钮
for k, v in pairs(npc.config) do
local page = math.floor((k-1) / 18) + 1
local IG_turnPage = pageContainers[page]
if not GUI:Win_IsNull(IG_turnPage) then
local btnIndexInPage = (k-1) % 18
local btn_col = btnIndexInPage % 2
local btn_row = math.floor(btnIndexInPage / 2)
local ly_x = btn_col * 116
local ly_y = 363 - (btn_row * 45)
local btnName = "btn" .. k
local btn_Item = GUI:Button_Create(IG_turnPage, btnName, ly_x, ly_y, "res/01/010006.png")
-- 正确设置按钮文本
GUI:Button_setTitleText(btn_Item, v.name)
GUI:Button_setTitleFontSize(btn_Item, 16)
-- 确保按钮可触摸
GUI:setTouchEnabled(btn_Item, true)
GUI:Button_setBright(btn_Item, true)
-- 绑定点击事件
GUI:addOnClickEvent(btn_Item, function()
-- 恢复上一个按钮颜色
if selectBtn and not GUI:Win_IsNull(selectBtn) then
GUI:Button_setTitleColor(selectBtn, "#ffffff")
end
-- 设置当前按钮选中颜色
GUI:Button_setTitleColor(btn_Item, "#00ff00")
selectBtn = btn_Item
-- 创建图鉴显示
npc:createItemShow(k, v)
end)
end
end
-- ... 后面的翻页逻辑保持不变 ...
end
```
主要问题:
1. **按钮触摸区域**:确保按钮创建时设置了正确的位置和大小
2. **按钮状态**:使用`GUI:Button_setBright(btn_Item, true)`确保按钮可用
3. **事件绑定时机**:在按钮创建后立即绑定事件,避免逻辑嵌套过深
4. **容器可见性**:确保按钮所在的父容器是可见且可触摸的
如果还有触摸问题,可以检查:
- 按钮图片路径是否正确
- 父容器的触摸设置是否开启
- 是否有其他控件覆盖了按钮区域
记得用`SL:print()`调试按钮的创建和事件触发情况!
← 返回问答库