要实现进入界面后自动显示第一个按钮的内容,你需要在界面创建完成后自动触发第一个按钮的点击事件。以下是修改后的代码:
```lua
-- 在openWin函数末尾添加自动触发逻辑
function npc:openWin()
-- ... 前面的代码保持不变 ...
-- 创建图鉴按钮和页面逻辑
local nowPage = 1
local totalPage = math.ceil(25/18)
local pageButtons = {}
local pageContainers = {}
local selectBtn = nil
local btnStart_x = 0
local btnStart_y = 363
local spacing_x = 116
local spacing_y = 45
local layoutRefs = {}
-- 存储第一个按钮的引用,用于自动触发
local firstButton = nil
for page = 1, totalPage do
pageButtons[page] = {}
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)
if page == 1 then
GUI:setVisible(IG_turnPage, true)
else
GUI:setVisible(IG_turnPage, false)
end
pageContainers[page] = IG_turnPage
local startIndex = (page - 1) * 18 + 1
local endIndex = math.min(page * 18, #npc.config)
for k = startIndex, endIndex do
local v = npc.config[k]
local btnPage = math.floor((k-1) / 18) + 1
local btnIndexInPage = (k - startIndex)
local btn_col = btnIndexInPage % 2
local btn_row = math.floor(btnIndexInPage / 2)
local ly_x = btn_col * spacing_x + btnStart_x
local ly_y = btnStart_y - (btn_row * spacing_y)
local btnName = "btn" .. k
local btn_Item = GUI:Button_Create(IG_turnPage, btnName, ly_x, ly_y, "res/01/010006.png")
GUI:Button_loadTextureDisabled(btn_Item, "res/01/010005.png")
GUI:setTouchEnabled(btn_Item, true)
GUI:Button_setBright(btn_Item, true)
GUI:Button_setTitleText(btn_Item, v.name)
GUI:Button_setTitleFontSize(btn_Item, 16)
-- 记录第一个按钮
if k == 1 then
firstButton = btn_Item
end
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
-- 删除之前的图鉴内容
for i, widget in ipairs(layoutRefs) do
if not GUI:Win_IsNull(widget) then
GUI:removeFromParent(widget)
end
end
layoutRefs = {}
-- 创建图鉴
local itemsConfig = npc.config[k].itemsIdx
local itemName = npc.config[k].itemsName
local imgStart_x = 10
local imgStart_y = 200
for i = 1, #itemsConfig do
local itemIdx = itemsConfig[i]
local name = itemName[i]
if itemIdx then
local img_x = (i - 1) % 3 * 162 + imgStart_x
local img_y = imgStart_y - math.floor((i-1)/3) * 160
local itemShowBg = "itemShowBg"..i
local itemShow = "itemShow"..i
local nameText = "nameText"..i
local stateText = "stateTxext"..i
local itemShow_bg = GUI:Image_Create(npc.ui.content_Layout, itemShowBg, img_x, img_y, "res/public/1900000610799.png")
GUI:setContentSize(itemShow_bg, 165, 150)
local itemShowOut = GUI:ItemShow_Create(itemShow_bg, itemShow, 63, 100, {index = itemIdx, count = 1, look = true, bgVisible = true, color = 255})
local centerX = 80 - string.len(name)*2.8
local itemName_Txt = GUI:Text_Create(itemShow_bg, nameText, centerX, 45, 16, "#ffffff", name)
local state_Txt = GUI:Text_Create(itemShow_bg, stateText, 60, 10, 16, "#ffffff", "0 / 1")
table.insert(layoutRefs, itemShow_bg)
end
end
end)
end
end
-- 上一页按钮事件
GUI:addOnClickEvent(npc.ui.lastPage_Btn, function()
if nowPage > 1 then
GUI:setVisible(pageContainers[nowPage], false)
nowPage = nowPage - 1
GUI:setVisible(pageContainers[nowPage], true)
GUI:Text_setString(npc.ui.pageNumber, tostring(nowPage))
end
end)
-- 下一页按钮事件
GUI:addOnClickEvent(npc.ui.nextPage_Btn, function()
if nowPage < totalPage then
GUI:setVisible(pageContainers[nowPage], false)
nowPage = nowPage + 1
GUI:setVisible(pageContainers[nowPage], true)
GUI:Text_setString(npc.ui.pageNumber, tostring(nowPage))
end
end)
GUI:Text_setString(npc.ui.pageTotalNumber, "/ "..totalPage)
-- 关键修改:界面创建完成后自动触发第一个按钮
-- 使用延迟确保界面完全创建完成
SL:ScheduleOnce(function()
if firstButton and not GUI:Win_IsNull(firstButton) then
-- 模拟点击第一个按钮
local clickFunc = GUI:getOnClickEvent(firstButton)
if clickFunc then
clickFunc()
end
else
SL:print("第一个按钮未找到或已销毁")
end
end, 0.1)
end
```
**修改说明:**
1. **记录第一个按钮**:在创建按钮时,当`k == 1`时,将第一个按钮的引用保存到`firstButton`变量中。
2. **延迟自动触发**:在函数末尾使用`SL:ScheduleOnce`延迟0.1秒执行,确保所有界面元素都已经创建完成。
3. **获取点击事件函数**:使用`GUI:getOnClickEvent(firstButton)`获取按钮绑定的点击事件函数,然后直接调用它。
4. **错误处理**:添加了按钮存在性检查,使用`GUI:Win_IsNull`确保按钮对象有效。
这样修改后,当玩家打开图鉴界面时,会自动显示"烈焰战神"套装的内容,第一个按钮也会显示为选中状态(绿色文字)。