-- ===================== 最终版:只在点击升级时播放,打开界面不重播 =====================
zhuansheng._lastPopupLevel = zhuansheng._lastPopupLevel or 0
zhuansheng._popupDelayAction = nil
zhuansheng._popupFadeAction = nil
zhuansheng._isClickLevelUp = false -- 标记:是否是点击升级
l
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-23 13:12:33 |
👁️ 阅读: 2
这段代码存在几个问题需要修正:
## 主要问题:
### 1. 定时器使用错误
```lua
-- 错误用法:
zhuansheng._popupDelayAction = SL:ScheduleOnce(function()
-- 内容
end, 2)
-- 正确用法:
zhuansheng._popupDelayAction = SL:ScheduleOnce(2, function()
-- 内容
end)
```
`SL:ScheduleOnce`的参数顺序是:`(delay, callback)`,不是`(callback, delay)`
### 2. 动作停止函数错误
```lua
-- 错误用法:
GUI:stopAction(zhuansheng._popupFadeAction)
-- 正确用法:
GUI:stopAllActions(ui.Image_2) -- 停止该节点所有动作
```
根据浮生梦老师前端课程内容,应该使用`GUI:stopAllActions(widget)`来停止节点的所有动作
### 3. 淡出动画前未设置透明度
```lua
-- 需要先设置透明度为255,再执行淡出
GUI:setOpacity(ui.Image_2, 255) -- 确保淡出前完全不透明
```
## 修正后的代码:
```lua
-- ===================== 修正版:只在点击升级时播放,打开界面不重播 =====================
zhuansheng._lastPopupLevel = zhuansheng._lastPopupLevel or 0
zhuansheng._popupDelayAction = nil
zhuansheng._popupFadeAction = nil
zhuansheng._isClickLevelUp = false -- 标记:是否是点击升级
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
SL:UnSchedule(zhuansheng._popupDelayAction)
zhuansheng._popupDelayAction = nil
end
-- 停止所有动作
GUI:stopAllActions(ui.Image_2)
-- 显示并重置状态
GUI:setVisible(ui.Image_2, true)
GUI:setOpacity(ui.Image_2, 255)
GUI:setScale(ui.Image_2, 0.6)
-- 动画:缩小 → 还原
GUI:runAction(ui.Image_2, GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 1.0)
))
-- 2秒后淡出
zhuansheng._popupDelayAction = SL:ScheduleOnce(2, function()
if not ui or not ui.Image_2 or GUI:Win_IsNull(ui.Image_2) then return end
-- 确保淡出前完全不透明
GUI:setOpacity(ui.Image_2, 255)
GUI:runAction(ui.Image_2, GUI:ActionSequence(
GUI:ActionFadeTo(1, 0),
GUI:CallFunc(function()
if ui.Image_2 and not GUI:Win_IsNull(ui.Image_2) then
GUI:setVisible(ui.Image_2, false)
end
end)
))
end)
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. 修正了`SL:ScheduleOnce`的参数顺序
2. 使用`GUI:stopAllActions()`替代错误的`GUI:stopAction()`
3. 在淡出动画前确保透明度设置为255
下次注意定时器的正确用法!不懂的可以问浮生梦尊师!
← 返回问答库