GUI:addOnClickEvent(npc.ui.Button_1, function()
GUI:Timeline_MoveTo(npc.ui.Effect_1, {x = 359, y = 189}, 0.3, function() end) -- 第一个特效移动动画
GUI:Timeline_MoveTo(npc.ui.Effect_2, {x = 35, y = 189}, 0.3, function() end) --
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-27 22:31:31 |
👁️ 阅读: 14
你的代码逻辑有问题。`GUI:Timeline_MoveTo`是动画函数,它不会立即改变控件位置,所以你在点击事件中立即用`GUI:getPosition`获取的是动画开始前的位置,而不是动画结束后的位置。
你需要使用`GUI:Timeline_MoveTo`的回调函数来在动画结束后执行判断。修改如下:
```lua
GUI:addOnClickEvent(npc.ui.Button_1, function()
-- 第一个特效移动动画
GUI:Timeline_MoveTo(npc.ui.Effect_1, {x = 359, y = 189}, 0.3, function()
-- 动画结束后检查位置
for i = 1, 3 do
local effectWidget = npc.ui["Effect_" .. i]
if effectWidget and not GUI:Win_IsNull(effectWidget) then
local pos = GUI:getPosition(effectWidget)
if pos.x == 197 and pos.y == 98 then
GUI:setOpacity(effectWidget, 255)
else
GUI:setOpacity(effectWidget, 60)
end
end
end
end)
-- 第二个特效移动动画
GUI:Timeline_MoveTo(npc.ui.Effect_2, {x = 35, y = 189}, 0.3, function() end)
-- 第二个特效缩放动画
GUI:Timeline_ScaleTo(npc.ui.Effect_2, 0.8, 0.3, function() end)
-- 第三个特效移动动画
GUI:Timeline_MoveTo(npc.ui.Effect_3, {x = 197, y = 98}, 0.3, function() end)
-- 第三个特效缩放动画
GUI:Timeline_ScaleTo(npc.ui.Effect_3, 1.2, 0.3, function() end)
end)
```
**注意:**
1. 我把判断逻辑放到了第一个特效移动动画的回调中,这样确保在动画结束后才检查位置
2. 添加了控件有效性检查:`if effectWidget and not GUI:Win_IsNull(effectWidget)`
3. 如果你需要所有动画都结束后再判断,可以把所有动画放在一个序列中,或者使用计数器来确保所有动画完成
**函数说明:**
- `GUI:Timeline_MoveTo(widget, pos, time, callback)` - 移动到指定位置
- `GUI:Timeline_ScaleTo(widget, scale, time, callback)` - 缩放到指定比例
- `GUI:getPosition(widget)` - 获取控件位置,返回包含x和y的table
- `GUI:setOpacity(widget, value)` - 设置不透明度(0-255)
- `GUI:Win_IsNull(widget)` - 检查控件是否为空
← 返回问答库