MainLeftTop = {}
function MainLeftTop.main()
local bool = SL:GetMetaValue("IS_PC_PLAY_MODE")
if bool then
SL:Print("PC端")
MainLeftTop.client = {831, -5}
MainLeftTop.status = false
else
SL:Print("手机端")
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-08 13:05:48 |
👁️ 阅读: 9
看了你的代码,主要功能是展开/收起面板的动画效果。我来帮你优化一下,移除 `Top_init` 函数,将逻辑整合到主函数中。
```lua
MainLeftTop = {}
function MainLeftTop.main()
-- 判断PC/手机端
local bool = SL:GetMetaValue("IS_PC_PLAY_MODE")
if bool then
SL:Print("PC端")
MainLeftTop.client = {831, -5}
MainLeftTop.status = false
else
SL:Print("手机端")
MainLeftTop.client = {831, -35}
MainLeftTop.status = true
end
-- 创建界面
local parent = GUI:Attach_LeftTop()
GUI:removeAllChildren(parent)
GUI:LoadExport(parent, "main/main_left_top")
local ui = GUI:ui_delegate(parent)
GUI:addOnClickEvent(ui.Button_2, MainLeftTop.telescopic)
GUI:addOnClickEvent(ui.Button_1, MainLeftTop.telescopic)
-- 设置初始位置
GUI:setPosition(ui.Node_1, MainLeftTop.client[1], MainLeftTop.client[2])
-- 根据状态初始化显示
if MainLeftTop.status == true then
-- 展开状态
GUI:setVisible(ui.Panel_1, true)
GUI:setVisible(ui.Button_1, false)
GUI:setVisible(ui.Button_2, true)
-- 获取子控件
local obj = GUI:getChildren(ui.Panel_1)
-- 子控件淡入
for _, v in pairs(obj) do
GUI:setOpacity(v, 0)
GUI:Timeline_FadeIn(v, 0.8, function() end)
end
-- Panel_1自身淡入
GUI:setOpacity(ui.Panel_1, 0)
GUI:Timeline_FadeIn(ui.Panel_1, 0.8, function() end)
else
-- 收起状态
GUI:setVisible(ui.Button_1, true)
GUI:setVisible(ui.Button_2, false)
GUI:setVisible(ui.Panel_1, false)
end
end
-- 展开/收起切换函数
function MainLeftTop.telescopic()
if MainLeftTop.status == true then
MainLeftTop.status = false
else
MainLeftTop.status = true
end
-- 重新执行主函数来刷新界面
MainLeftTop.main()
end
```
**优化说明:**
1. **移除Top_init函数**:将原来的 `Top_init` 函数逻辑直接整合到 `MainLeftTop.main()` 中
2. **保持功能不变**:展开/收起动画效果完全保留
3. **简化调用**:`telescopic` 函数现在直接调用 `MainLeftTop.main()` 来刷新界面
4. **代码结构更清晰**:所有界面创建和状态管理都在主函数中完成
**使用方式:**
- 首次调用:`MainLeftTop.main()`
- 切换展开/收起:`MainLeftTop.telescopic()`
这样优化后,代码逻辑更集中,维护起来也更方便。如果还有不明白的地方,随时问我!
← 返回问答库