local targetX = 77 -- 最终X坐标
local targetY = 281 -- 最终Y坐标
-- 在动作序列最后添加一个CallFunc来设置固定位置
local callback = function()
-- 设置控件到最终位置
GUI:setPosition(
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-11 19:21:18 |
👁️ 阅读: 8
你的问题是想让 `Image_9` 在动画结束后停留在目标位置,并且重新打开界面时也保持在这个位置,而不是回到动画开始前的原始坐标。
根据你提供的代码,问题在于 `GUI:setPosition` 只在动画回调中执行了一次。当界面重新打开时,`update_effect_icons` 函数会重新设置 `Image_9` 的可见性,但它的位置没有被持久化保存,所以会回到它最初在界面布局文件中定义的位置。
**解决方案:**
我们需要在动画结束后,不仅设置位置,还要将这个最终位置记录下来。这样在下次打开界面时,我们可以直接应用这个位置。
**修改步骤:**
1. **保存最终位置:** 在动画的回调函数中,除了设置位置,我们还需要将目标坐标存储起来,以便后续使用。
2. **初始化时应用位置:** 在 `update_effect_icons` 函数中,当设置 `Image_9` 为可见时,检查是否有保存的坐标,如果有则直接应用。
**具体代码修改如下:**
首先,在模块的顶部或合适位置定义一个表来存储坐标(或者利用现有结构):
```lua
-- 在 zhuansheng 模块内定义一个表来存储各个Image控件的最终位置
zhuansheng.savedPositions = zhuansheng.savedPositions or {}
```
然后,修改你的动画回调函数,保存坐标:
```lua
-- 在动作序列最后添加一个CallFunc来设置固定位置
local callback = function()
-- 设置控件到最终位置
GUI:setPosition(ui.Image_9, targetX, targetY)
-- 保存这个位置
zhuansheng.savedPositions["Image_9"] = {x = targetX, y = targetY}
SL:print("Image_9已固定在最终位置,坐标已保存")
end
```
最后,修改 `update_effect_icons` 函数中显示 `Image_9` 的部分,在设置为可见后,检查并应用保存的位置:
```lua
-- 根据转生等级显示对应的Image控件
if curLevel >= 1 then
if GUI:Win_IsNotNull(ui["Image_9"]) then
GUI:setVisible(ui["Image_9"], true)
-- 检查是否有保存的位置,有则应用
if zhuansheng.savedPositions["Image_9"] then
local pos = zhuansheng.savedPositions["Image_9"]
GUI:setPosition(ui["Image_9"], pos.x, pos.y)
SL:print("应用保存的Image_9位置:", pos.x, pos.y)
end
end
end
```
**你需要为 `Image_10` 到 `Image_13` 做同样的处理**,如果它们也有类似的动画和位置需求。
**核心逻辑总结:**
动画执行时,将最终坐标存入一个“记忆”(`savedPositions` 表)中。每次界面刷新(`update_effect_icons`)时,在让控件可见后,先去“记忆”里查找是否有它的坐标,有就立刻设置上。这样无论界面关闭再打开多少次,控件都会出现在你最后让它去到的位置。
这样修改后,你的需求就能实现了。如果还有不清楚的地方,随时可以再问浮生梦老师!
← 返回问答库