for i = 22, 26 do
local effect = ui["Effect_"..i]
if not GUI:Win_IsNull(effect) then
GUI:setVisible(effect, false)
end
end
-- 下面是你原来的动画代码,完全不动
for i = 1, effectPos do
local widget = ui["Effect_" .. i]
if not GUI:Win_IsNul
你的代码逻辑存在一个关键问题:当 `effectPos` 大于 5(即 6 级)时,你试图隐藏 `Effect_22` 到 `Effect_26`,但之后你又想显示 `Effect_22`,而它已经被隐藏了。
具体来说:
1. 第一段循环 `for i = 22, 26 do` 会隐藏所有 `Effect_22` 到 `Effect_26`。
2. 当 `effectPos = 6` 时,你的 `linkEffectId = 21 + 6 = 27`,但 `ui["Effect_27"]` 不存在,所以 `linkEffect` 是 `nil`,不会执行淡出动画。
3. 你希望 6 级对应 `Effect_22`,但它在第一段循环已经被隐藏了,并且没有在第二段循环中重新显示。
**修正方法**:
你需要把隐藏逻辑改为只隐藏 **当前不需要的** 链接特效,而不是全部隐藏。
```lua
-- 先隐藏上一次的链接特效(如果有的话)
if lastEffectPos and lastEffectPos >= 1 and lastEffectPos <= 5 then
local lastLinkId = 21 + lastEffectPos
local lastLinkEffect = ui["Effect_" .. lastLinkId]
if not GUI:Win_IsNull(lastLinkEffect) then
GUI:setVisible(lastLinkEffect, false)
end
end
-- 然后执行你的动画逻辑
for i = 1, effectPos do
local widget = ui["Effect_" .. i]
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, true)
if i == effectPos and effectPos ~= lastEffectPos then
local linkEffectId = 21 + i
local linkEffect = ui["Effect_" .. linkEffectId]
if not GUI:Win_IsNull(linkEffect) then
GUI:setVisible(linkEffect, true)
GUI:Timeline_FadeOut(linkEffect, 1.5, function()
GUI:setVisible(linkEffect, false)
end)
end
GUI:runAction(widget, GUI:ActionSequence(
GUI:ActionScaleTo(0.3, 1.2),
GUI:ActionScaleTo(0.3, 1.0)
))
end
end
end
```
这样修改后:
- 6 级(`effectPos = 6` 对应 `Effect_1` 和 `Effect_22`)时,`Effect_22` 不会被预先隐藏,而是会正常显示并执行淡出动画。
- 同时,上一次的链接特效会被正确隐藏,避免残留显示。
如果你还有问题,可以继续问我!