-- ===================== 追加:等级弹窗 Image_2 自动显示(不改动原有代码)=====================
zhuansheng._lastPopupLevel = zhuansheng._lastPopupLevel or 0
zhuansheng._popupDelayAction = nil
zhuansheng._popupFadeAction = nil
local function showLevelTipImage2()
loc
这段代码有几个问题需要修正,我来帮你分析一下:
## 主要问题:
1. **ActionFadeOut函数不存在** - 根据浮生梦老师前端课程内容,应该使用`GUI:ActionFadeTo(time, opacity)`来实现淡出效果
2. **定时器使用不规范** - 对于单次延迟,应该使用`SL:ScheduleOnce`而不是`GUI:ActionDelay`
3. **缺少组件空值判断** - 应该使用`GUI:Win_IsNull(widget)`来检查组件是否有效
## 修正后的代码:
```lua
-- ===================== 修正后的等级弹窗代码 =====================
zhuansheng._lastPopupLevel = zhuansheng._lastPopupLevel or 0
zhuansheng._popupDelayAction = nil
zhuansheng._popupFadeAction = nil
local function showLevelTipImage2()
local ui = zhuansheng.parent._ui
if not ui or not ui.Image_2 then return end
-- 检查组件是否有效
if GUI:Win_IsNull(ui.Image_2) then return end
-- 停止旧动画
if zhuansheng._popupDelayAction then
GUI:stopAction(zhuansheng._popupDelayAction)
zhuansheng._popupDelayAction = nil
end
if zhuansheng._popupFadeAction then
GUI:stopAction(zhuansheng._popupFadeAction)
zhuansheng._popupFadeAction = nil
end
-- 显示并重置
GUI:setVisible(ui.Image_2, true)
GUI:setOpacity(ui.Image_2, 255)
-- 使用SL:ScheduleOnce实现延迟
SL:ScheduleOnce(function()
if not ui or not ui.Image_2 or GUI:Win_IsNull(ui.Image_2) then return end
-- 淡出动画(使用ActionFadeTo)
zhuansheng._popupFadeAction = GUI:runAction(ui.Image_2, GUI:ActionSequence(
GUI:ActionFadeTo(1, 0), -- 1秒内透明度变为0
GUI:CallFunc(function()
if ui and ui.Image_2 and not GUI:Win_IsNull(ui.Image_2) then
GUI:setVisible(ui.Image_2, false)
end
end)
))
end, 2) -- 2秒后执行
end
-- 升级时自动触发
local oldUpmain = zhuansheng.upmain
function zhuansheng.upmain()
oldUpmain()
local curLevel = lib:get_zs_level() or 0
if curLevel > zhuansheng._lastPopupLevel and curLevel >= 1 then
zhuansheng._lastPopupLevel = curLevel
showLevelTipImage2()
end
end
-- ===================== 修正结束 =====================
```
## 修改说明:
1. **`GUI:ActionFadeOut` → `GUI:ActionFadeTo`**:这是996引擎中正确的淡出动画函数
2. **`GUI:ActionDelay` → `SL:ScheduleOnce`**:根据规范,单次延迟应该使用`SL:ScheduleOnce`
3. **增加了组件空值检查**:使用`GUI:Win_IsNull(widget)`确保操作前组件有效
4. **回调函数中增加了安全判断**:防止组件在动画过程中被销毁
这样修改后代码会更加稳定,符合浮生梦老师的前端开发规范。下次写动画效果时,记得先检查函数是否存在哦!