我来帮你优化这段代码。从浮生梦老师前端课程内容来看,有几个地方可以改进:
```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}
-- 优化1:添加安全检查函数
local function safeSetVisible(widget, visible)
if not GUI:Win_IsNull(widget) then
GUI:setVisible(widget, visible)
end
end
-- 优化2:改进批量设置函数,避免重复判断
local function setGroupVisible(group, visible)
for _, widget in ipairs(group) do
safeSetVisible(widget, visible)
end
end
-- 优化3:改进单个显示函数,更简洁
local function setOneVisible(group, index)
for i, widget in ipairs(group) do
safeSetVisible(widget, i == index)
end
end
-- 优化4:使用局部函数减少重复代码
local function setEffectGroupVisible(startIdx, endIdx, group, visible)
for i = startIdx, endIdx do
safeSetVisible(group[i], visible)
end
end
-- 优化5:主逻辑重构,使用switch-case模式更清晰
local function updateUIByVar(var)
local floorVar = math.floor(var)
-- 先全部隐藏
setGroupVisible(wanchengGroup, false)
setGroupVisible(imageGroup, false)
setGroupVisible(effectGroup1, false)
setGroupVisible(effectGroup2, false)
if var <= 0 then
-- 第0阶段
safeSetVisible(imageGroup[1], true)
setGroupVisible(effectGroup2, true)
elseif floorVar == 1 then
-- 第1阶段 (1 <= var < 2)
safeSetVisible(wanchengGroup[1], true)
safeSetVisible(imageGroup[2], true)
safeSetVisible(effectGroup1[1], true)
setEffectGroupVisible(2, 5, effectGroup2, true)
elseif floorVar == 2 then
-- 第2阶段 (2 <= var < 3)
setEffectGroupVisible(1, 2, wanchengGroup, true)
safeSetVisible(imageGroup[3], true)
setEffectGroupVisible(1, 2, effectGroup1, true)
setEffectGroupVisible(3, 5, effectGroup2, true)
elseif floorVar == 3 then
-- 第3阶段 (3 <= var < 4)
setEffectGroupVisible(1, 3, wanchengGroup, true)
safeSetVisible(imageGroup[4], true)
setEffectGroupVisible(1, 3, effectGroup1, true)
setEffectGroupVisible(4, 5, effectGroup2, true)
elseif floorVar == 4 then
-- 第4阶段 (4 <= var < 5)
setEffectGroupVisible(1, 4, wanchengGroup, true)
safeSetVisible(imageGroup[5], true)
setEffectGroupVisible(1, 4, effectGroup1, true)
safeSetVisible(effectGroup2[5], true)
elseif var >= 5 then
-- 第5阶段及以上
setGroupVisible(wanchengGroup, true)
setGroupVisible(effectGroup1, true)
end
end
-- 使用方式
updateUIByVar(var)
```
**优化说明:**
1. **安全性提升**:添加了`safeSetVisible`函数,统一处理控件空值判断
2. **代码复用**:使用`setEffectGroupVisible`函数处理连续索引的显示/隐藏
3. **逻辑清晰**:改用`math.floor(var)`判断阶段,避免复杂的范围判断
4. **统一初始化**:每次先全部隐藏,再按阶段显示,避免状态混乱
5. **函数封装**:将主逻辑封装为`updateUIByVar`函数,便于调用和维护
这样优化后,代码更简洁、更易读,也更容易扩展新的阶段。如果还有不明白的地方,可以随时问浮生梦老师!