if SL:GetMetaValue("GAME_DATA", "NeedResetPosWithChat") then
local idList = string.split(SL:GetMetaValue("GAME_DATA", "NeedResetPosWithChat"), "#")
for _, id in ipairs(idList) do
local i = tonumber(id)
local na
从你提供的代码来看,想要让 `yinc` 组件跟随其他控件一起移动,关键在于获取并更新它的位置。代码中已经找到了 `yinc` 控件(`GUI:Win_FindParent(108)`),但没有对它执行移动动作。
修改思路是:在移动其他控件(`widget`)时,如果 `yinc` 存在,也让它执行相同的移动逻辑。以下是修改后的代码片段:
```lua
if SL:GetMetaValue("GAME_DATA", "NeedResetPosWithChat") then
local idList = string.split(SL:GetMetaValue("GAME_DATA", "NeedResetPosWithChat"), "#")
for _, id in ipairs(idList) do
local i = tonumber(id)
local name = widgetList[i]
local widget = MainProperty._ui[name]
if i and name and widget then
if i ~= 8 and i ~= 9 and i ~= 10 then
local chatHei = GUI:getContentSize(_layoutMiniChat).height
if not tolua.isnull(widget) then
local yinc = GUI:Win_FindParent(108)
if not tolua.isnull(yinc) then
if not state then
-- 聊天框展开时隐藏 yinc
GUI:setVisible(yinc, false)
else
-- 聊天框收起时显示 yinc
GUI:setVisible(yinc, true)
end
-- 新增:为 yinc 也记录原始位置并移动
if not oriPosYList["yinc"] then
oriPosYList["yinc"] = GUI:getPositionY(yinc)
end
local setYForYinc = not state and oriPosYList["yinc"] - chatHei or oriPosYList["yinc"]
GUI:runAction(yinc, GUI:ActionMoveTo(0.5, GUI:getPositionX(yinc), setYForYinc))
end
if not oriPosYList[name] then
oriPosYList[name] = GUI:getPositionY(widget)
end
local setY = not state and oriPosYList[name] - (chatHei) or oriPosYList[name]
GUI:runAction(widget, GUI:ActionMoveTo(0.5, GUI:getPositionX(widget), setY))
end
else
-- ... 原有 i == 8,9,10 的逻辑保持不变 ...
end
end
end
end
```
**主要改动说明:**
1. 在找到 `yinc` 控件后,新增了位置记录和移动动作。
2. `oriPosYList["yinc"]` 用于记录 `yinc` 的原始Y坐标,避免每次计算。
3. `setYForYinc` 的计算逻辑与 `widget` 保持一致:聊天框展开时下移,收起时回到原位。
4. 使用 `GUI:ActionMoveTo` 函数让 `yinc` 在0.5秒内平滑移动到新位置。
这样修改后,当聊天框展开或收起时,`yinc` 就会和其他界面控件同步移动了。记得确保 `oriPosYList` 这个表在外部已经定义好。