local playedEffects = {}
for i = 1, effectPos do
local effectName = "Effect_" .. i
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], true)
-- 检查是否已经播放过这个特效
if not playedEffects[effectNa
你的代码逻辑有问题。`playedEffects`表只在当前函数调用时生效,每次重新调用时都会重置为空表,所以每次都会重新播放所有特效。
问题分析:
1. `playedEffects`是局部变量,每次函数执行都会创建新的空表
2. `if not playedEffects[effectName] then`这个条件在每次新调用时都为true
3. 所以每个特效都会重新播放动画
解决方案:
```lua
-- 将playedEffects定义为全局或模块级变量,避免每次重置
if not _G.playedEffects then
_G.playedEffects = {}
end
for i = 1, effectPos do
local effectName = "Effect_" .. i
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], true)
-- 使用全局表检查
if not _G.playedEffects[effectName] then
_G.playedEffects[effectName] = true
local function playScaleAnimation()
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:runAction(ui[effectName], GUI:ActionSequence(
GUI:ActionScaleTo(0.1, 1.4),
GUI:ActionScaleTo(0.2, 1)
))
end
end
SL:ScheduleOnce(function()
playScaleAnimation()
end, (i-1) * .05)
else
-- 已经播放过的特效,只显示不播放动画
GUI:setVisible(ui[effectName], true)
end
end
end
```
这样修改后,`Effect_1`只会在第一次调用时播放动画,后续调用会直接显示而不重复播放动画。