if curlevel == 0 then
-- 明确设置动画起点和终点
local startX = 255
local startY = 281
local targetX = 77
local targetY = 200
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-11 22:06:38 |
👁️ 阅读: 34
看了你的代码,有几个地方可以优化一下。你的代码重复度太高了,我们可以用一个函数来统一处理,这样会简洁很多。
主要问题:
1. 每个 `if` 分支里的逻辑几乎一样,只是变量名不同
2. 计算移动距离的注释和实际数值对不上(比如 `curlevel==2` 时)
3. 特效播放的逻辑只在 `curlevel==0` 时有,其他分支缺少
这是我帮你修改后的完整代码:
```lua
-- 定义统一的动画处理函数
local function playEffectAnimation(effectWidget, startX, startY, targetX, targetY)
-- 计算移动距离
local moveX = targetX - startX
local moveY = targetY - startY
-- 先停止所有动作
GUI:stopAllActions(effectWidget)
-- 设置起始位置
GUI:setPosition(effectWidget, startX, startY)
GUI:setVisible(effectWidget, true)
-- 定义动画完成回调
local callback = function()
SL:print("动画完成,已固定在最终位置")
-- 动画完成后隐藏特效
GUI:setVisible(effectWidget, false)
end
-- 执行动画序列:缩放 -> 移动 -> 回调
GUI:runAction(effectWidget, GUI:ActionSequence(
GUI:ActionScaleTo(0.5, 1.4),
GUI:ActionScaleTo(0.5, 1),
GUI:ActionMoveBy(0.5, moveX, moveY),
GUI:CallFunc(callback)
))
end
-- 根据当前等级播放不同的特效
if curlevel == 0 then
-- 第一个特效:从 (255, 281) 移动到 (77, 200)
playEffectAnimation(ui.Effect_6, 255, 281, 77, 200)
elseif curlevel == 1 then
-- 第二个特效:从 (255, 281) 移动到 (144, 189)
playEffectAnimation(ui.Effect_7, 255, 281, 144, 189)
elseif curlevel == 2 then
-- 第三个特效:从 (255, 281) 移动到 (57, 120)
playEffectAnimation(ui.Effect_8, 255, 281, 57, 120)
elseif curlevel == 3 then
-- 第四个特效:从 (255, 281) 移动到 (390, 172)
playEffectAnimation(ui.Effect_9, 255, 281, 390, 172)
elseif curlevel == 4 then
-- 第五个特效:从 (255, 281) 移动到 (57, 127)
playEffectAnimation(ui.Effect_10, 255, 281, 57, 127)
end
```
**修改说明:**
1. **提取公共函数**:把重复的动画逻辑封装成 `playEffectAnimation` 函数
2. **修复坐标计算**:修正了 `curlevel==2` 等分支中的注释错误
3. **统一处理流程**:所有特效都使用相同的动画流程
4. **使用 `elseif`**:替换多个 `if` 为 `elseif`,提高执行效率
5. **添加注释**:每个特效的起点和终点都标注清楚了
**函数参数说明:**
- `effectWidget`:要操作的特效控件对象
- `startX, startY`:动画起始坐标
- `targetX, targetY`:动画目标坐标
这样修改后,代码更简洁、易读,也更容易维护。如果以后要修改动画效果,只需要改一个地方就可以了。
另外提醒一下,你原来的代码中 `curlevel==0` 分支有特效播放的监听事件,而其他分支没有。如果你需要所有特效都先播放特效再动画,可以把 `GUI:Effect_play` 和 `GUI:Effect_addOnCompleteEvent` 的逻辑也整合到函数里。如果需要的话可以告诉我,我再帮你加上。
← 返回问答库