local heinu = {}
function heinu.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
heinu.parent = lib:openwin(param1, nil, true, param4) or {}
看了你的代码,我发现了问题所在。在`playAnimation`函数中,你每次调用都会对所有相关的`Image_2`到`Image_8`执行淡出动画,这会导致已经淡出的图片被重复执行动画。
问题出在这里:你的`playAnimation`函数内部没有判断当前图片是否已经淡出,而是直接对所有图片执行动画。你需要修改逻辑,让每个图片只执行一次动画。
这是修改后的代码:
```lua
-- 在heinu.upmain函数中,添加一个记录表来跟踪哪些图片已经淡出
heinu.animatedImages = heinu.animatedImages or {}
-- 修改playAnimation函数
local function playAnimation(imgTitle, imgCoal, delayTime)
-- 检查这个黑煤球是否已经执行过动画
if heinu.animatedImages[imgCoal] then
return -- 如果已经执行过,直接返回
end
if not GUI:Win_IsNull(ui[imgTitle]) and not GUI:Win_IsNull(ui[imgCoal]) then
-- 标记这个图片已经执行动画
heinu.animatedImages[imgCoal] = true
-- 感谢标题淡入动画
GUI:setVisible(ui[imgTitle], true)
GUI:setOpacity(ui[imgTitle], 0) -- 先设为透明
local titleFadeIn = GUI:ActionFadeIn(0.5)
GUI:runAction(ui[imgTitle], titleFadeIn)
-- 1秒后执行黑煤球移动淡出 + 感谢标题淡出
SL:ScheduleOnce(function()
-- 黑煤球向下移动并淡出
local moveDown = GUI:ActionMoveBy(0.5, 0, -100)
local coalFadeOut = GUI:ActionFadeOut(0.5)
local coalSequence = GUI:ActionSequence(
moveDown,
coalFadeOut,
GUI:CallFunc(function()
GUI:setVisible(ui[imgCoal], false) -- 最后隐藏
end)
)
GUI:runAction(ui[imgCoal], coalSequence)
-- 感谢标题淡出
local titleFadeOut = GUI:ActionFadeOut(0.5)
local titleSequence = GUI:ActionSequence(
titleFadeOut,
GUI:CallFunc(function()
GUI:setVisible(ui[imgTitle], false) -- 最后隐藏
end)
)
GUI:runAction(ui[imgTitle], titleSequence)
end, 1.0 + delayTime)
end
end
-- 在初始化时重置记录表
local var = tonumber(SL:GetMetaValue("SERVER_VALUE", "U47"))
SL:Print("获取当前焚天等级 var =", var)
-- 重置动画记录
heinu.animatedImages = {}
-- 根据var等级执行动画
if var >= 1 then
playAnimation("Image_9", "Image_2", 0)
end
if var >= 2 then
playAnimation("Image_10", "Image_3", 0.1)
end
if var >= 3 then
playAnimation("Image_11", "Image_4", 0.2)
end
if var >= 4 then
playAnimation("Image_12", "Image_5", 0.3)
end
if var >= 5 then
playAnimation("Image_13", "Image_6", 0.4)
end
if var >= 6 then
playAnimation("Image_14", "Image_7", 0.5)
end
if var >= 7 then
playAnimation("Image_15", "Image_8", 0.6)
end
```
主要修改点:
1. 添加了一个`heinu.animatedImages`表来记录哪些图片已经执行过淡出动画
2. 在`playAnimation`函数开始时检查图片是否已经执行过动画,如果执行过就直接返回
3. 每次调用`upmain`时重置动画记录表
4. 只有未执行过动画的图片才会执行新的动画序列
这样修改后,当`Image_2`淡出后,再次调用`playAnimation`时,`Image_2`就不会再执行动画了,而`Image_3`会正常执行它的动画。
注意:`SL:ScheduleOnce`是996引擎的单次延迟定时器函数,确保你的项目中有这个函数可用。