if var <= 0 then
GUI:setVisible(ui.wancheng, false)
GUI:setVisible(ui.wancheng_1, false)
GUI:setVisible(ui.wancheng_2, false)
GUI:setVisible(ui.wancheng_3, false)
GUI:setVisible(ui.wancheng_4, false)
GU
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-18 21:25:39 |
👁️ 阅读: 16
看了你的代码,这是一个根据变量`var`的值来批量设置UI控件可见性的逻辑。代码结构重复较多,可以优化得更简洁。
主要问题:
1. 每个条件分支都写了很多重复的`GUI:setVisible()`调用
2. 逻辑判断可以更紧凑
优化方案:
```lua
-- 先定义所有需要控制的控件组
local wanchengGroup = {ui.wancheng, ui.wancheng_1, ui.wancheng_2, ui.wancheng_3, ui.wancheng_4}
local imageGroup = {ui.Image_4, ui.Image_5, ui.Image_6, ui.Image_7, ui.Image_8}
local effectGroup1 = {ui.Effect_6, ui.Effect_7, ui.Effect_8, ui.Effect_9, ui.Effect_10}
local effectGroup2 = {ui.Effect_1, ui.Effect_2, ui.Effect_3, ui.Effect_4, ui.Effect_5}
-- 批量设置可见性的辅助函数
local function setGroupVisible(group, visible)
for _, widget in ipairs(group) do
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, visible)
end
end
end
-- 设置指定索引的控件可见,其他隐藏
local function setOneVisible(group, index)
for i, widget in ipairs(group) do
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, i == index)
end
end
end
-- 主逻辑
if var <= 0 then
setGroupVisible(wanchengGroup, false)
setOneVisible(imageGroup, 1) -- Image_4显示
setGroupVisible(effectGroup1, false)
setGroupVisible(effectGroup2, true)
elseif var >= 1 and var < 2 then
setOneVisible(wanchengGroup, 1) -- wancheng显示
setOneVisible(imageGroup, 2) -- Image_5显示
setOneVisible(effectGroup1, 1) -- Effect_6显示
-- Effect_2到Effect_5显示
GUI:setVisible(ui.Effect_1, false)
GUI:setVisible(ui.Effect_2, true)
GUI:setVisible(ui.Effect_3, true)
GUI:setVisible(ui.Effect_4, true)
GUI:setVisible(ui.Effect_5, true)
elseif var >= 2 and var < 3 then
setGroupVisible({ui.wancheng, ui.wancheng_1}, true)
setGroupVisible({ui.wancheng_2, ui.wancheng_3, ui.wancheng_4}, false)
setOneVisible(imageGroup, 3) -- Image_6显示
setGroupVisible({ui.Effect_6, ui.Effect_7}, true)
setGroupVisible({ui.Effect_8, ui.Effect_9, ui.Effect_10}, false)
setGroupVisible({ui.Effect_1, ui.Effect_2}, false)
setGroupVisible({ui.Effect_3, ui.Effect_4, ui.Effect_5}, true)
elseif var >= 3 and var < 4 then
setGroupVisible({ui.wancheng, ui.wancheng_1, ui.wancheng_2}, true)
setGroupVisible({ui.wancheng_3, ui.wancheng_4}, false)
setOneVisible(imageGroup, 4) -- Image_7显示
setGroupVisible({ui.Effect_6, ui.Effect_7, ui.Effect_8}, true)
setGroupVisible({ui.Effect_9, ui.Effect_10}, false)
setGroupVisible({ui.Effect_1, ui.Effect_2, ui.Effect_3}, false)
setGroupVisible({ui.Effect_4, ui.Effect_5}, true)
elseif var >= 4 and var < 5 then
setGroupVisible({ui.wancheng, ui.wancheng_1, ui.wancheng_2, ui.wancheng_3}, true)
GUI:setVisible(ui.wancheng_4, false)
setOneVisible(imageGroup, 5) -- Image_8显示
setGroupVisible({ui.Effect_6, ui.Effect_7, ui.Effect_8, ui.Effect_9}, true)
GUI:setVisible(ui.Effect_10, false)
setGroupVisible({ui.Effect_1, ui.Effect_2, ui.Effect_3, ui.Effect_4}, false)
GUI:setVisible(ui.Effect_5, true)
elseif var >= 5 then
setGroupVisible(wanchengGroup, true)
setGroupVisible(imageGroup, false)
setGroupVisible(effectGroup1, true)
setGroupVisible(effectGroup2, false)
end
```
优化后的代码:
1. **减少了重复代码**:使用辅助函数批量操作
2. **增加了空值判断**:使用`GUI:Win_IsNull()`防止控件不存在时报错
3. **逻辑更清晰**:通过分组管理相关控件
4. **易于维护**:如果要修改某个组的显示逻辑,只需要改一处
注意:这里我使用了`GUI:Win_IsNull()`函数来检查控件是否有效,这是根据浮生梦老师前端课程内容中的最佳实践。
← 返回问答库