你的代码问题在于每次调用 `ChuanSong.clickMap(index)` 时,都会遍历所有控件并执行淡入动画。要改成首次有淡入效果,之后点击没有,你需要记录一个状态变量来判断是否是首次。
根据浮生梦老师前端课程内容,这里给出修改方案:
1. 在模块顶部添加一个状态标志
2. 在 `clickMap` 函数中判断这个标志
3. 首次执行淡入动画后,将标志设为false
修改后的代码部分:
```lua
ChuanSong._firstClick = true -- 添加在模块顶部,用于记录是否首次点击
function ChuanSong.clickMap(index)
for k, v in pairs(ChuanSong.tMapBtns) do
GUI:Button_setBrightStyle(v, index == k and 1 or 0)
GUI:Button_setTitleColor(v, index == k and "#FFFF00" or "#A0A0A4")
end
ChuanSong.nSelIndex = index
local tData = cfg_chuansong[index]
if tData then
GUI:Text_setString(ChuanSong.ui.lbl_mapname, tData.mapname)
local str = ""
if tData.needlv and tData.needlv > 0 then
str = "等级要求:" .. tData.needlv
else
str = "等级要求:0"
end
GUI:Text_setString(ChuanSong.ui.lbl_condition, str)
local desp = ChuanSong.getXhDesp(tData)
GUI:Text_setString(ChuanSong.ui.lbl_enter_xiaohao, "进入消耗:" .. desp)
GUI:Text_setString(ChuanSong.ui.lbl_bossshow, "boss展示:" .. tData.bossshow)
GUI:removeAllChildren(ChuanSong.ui.Layout_itemshow)
local tConsume = SL:Split(tData.showitems, "#")
for k, v in pairs(tConsume) do
local parent = GUI:Image_Create(ChuanSong.ui.Layout_itemshow, "itembg" .. k, (k - 1) * 70, 0,
"res/custom/chuansong/k.png")
if parent then
local setData = {
index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", v),
look = true,
}
local item = GUI:ItemShow_Create(parent, "itemcs" .. k, 30, 30, setData)
GUI:setAnchorPoint(item, 0.5, 0.5)
end
end
end
-- 只首次执行淡入效果
if ChuanSong._firstClick then
SL:print("======首次点击,执行淡入动画=====")
for name, widget in pairs(ChuanSong.ui) do
if not GUI:Win_IsNull(widget) then
GUI:setOpacity(widget, 0)
GUI:Timeline_FadeIn(widget, 0.15, function()
end)
end
end
ChuanSong._firstClick = false -- 标记已执行过首次动画
else
SL:print("======非首次点击,不执行淡入动画=====")
end
end
```
**修改说明:**
1. 在模块顶部添加 `ChuanSong._firstClick = true`,用于记录是否是首次点击
2. 在 `clickMap` 函数中,只有当 `_firstClick` 为true时才执行淡入动画
3. 执行完首次动画后,将 `_firstClick` 设为false,这样后续点击就不会再执行淡入效果了
**注意:** 如果你希望重新打开界面时也能有淡入效果,需要在界面关闭时重置这个标志,可以在 `closePanel` 函数中添加:
```lua
function ChuanSong.closePanel()
if ChuanSong.parent and GUI:Win_IsNotNull(ChuanSong.parent) then
GUI:Win_Close(ChuanSong.parent)
ChuanSong._firstClick = true -- 重置标志,下次打开时重新淡入
end
end
```
这样修改后,首次点击地图按钮会有淡入效果,之后点击同一个界面内的不同按钮就不会重复淡入了。