local ui, root = GUI:npcUI("shijieditu")
-- 获取当前转生等级
local reLevel = SL:GetMetaValue("RELEVEL") or 0
-- 判断转生等级是否≥5
if reLevel >= 5 then
-- 显示Button_1
if GUI:Win_IsNotNull(ui.Button_1) then
GUI:setVisible(ui.Button_1, true)
G
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-16 20:14:19 |
👁️ 阅读: 17
同学,你的代码思路是对的,但有几个地方需要优化和修正。主要问题是逻辑判断有重复,并且对按钮和特效的显示/隐藏控制逻辑不够清晰。我来帮你补全并优化一下。
```lua
local ui, root = GUI:npcUI("shijieditu")
-- 获取当前转生等级
local reLevel = SL:GetMetaValue("RELEVEL") or 0
-- 定义一个函数来处理每个按钮和特效的显示逻辑
local function setupButton(buttonIndex, requiredLevel, effectIndex, netMsgParam)
local buttonName = "Button_" .. buttonIndex
local effectName = "Effect_" .. effectIndex
if GUI:Win_IsNotNull(ui[buttonName]) then
if reLevel >= requiredLevel then
-- 显示按钮
GUI:setVisible(ui[buttonName], true)
GUI:addOnClickEvent(ui[buttonName], function()
SL:print("点击了第" .. buttonIndex .. "个按钮", "转生等级:" .. reLevel)
GUI:delayTouchEnabled(ui[buttonName], 0.2)
SL:SendLuaNetMsg(58003, 0, netMsgParam, 0, 0)
end)
-- 显示对应的特效
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], true)
end
else
-- 隐藏按钮和特效
GUI:setVisible(ui[buttonName], false)
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], false)
end
end
end
end
-- 按照你的要求补全Button_1到Button_9,转生等级最大45级
-- 这里假设每个按钮需要的转生等级递增5级
setupButton(1, 5, 1, 33) -- Button_1: 转生≥5级,发送参数33
setupButton(2, 10, 2, 34) -- Button_2: 转生≥10级,发送参数34
setupButton(3, 15, 3, 35) -- Button_3: 转生≥15级,发送参数35
setupButton(4, 20, 4, 36) -- Button_4: 转生≥20级,发送参数36
setupButton(5, 25, 5, 37) -- Button_5: 转生≥25级,发送参数37
setupButton(6, 30, 6, 38) -- Button_6: 转生≥30级,发送参数38
setupButton(7, 35, 7, 39) -- Button_7: 转生≥35级,发送参数39
setupButton(8, 40, 8, 40) -- Button_8: 转生≥40级,发送参数40
setupButton(9, 45, 9, 41) -- Button_9: 转生≥45级,发送参数41
```
**优化说明:**
1. **函数封装**:使用`setupButton`函数统一处理每个按钮的逻辑,避免代码重复
2. **参数化**:将按钮索引、所需转生等级、特效索引、网络消息参数都作为参数传入
3. **清晰逻辑**:每个按钮只控制自己的显示状态,不会影响其他按钮
4. **扩展性**:如果需要调整转生等级要求或消息参数,只需要修改函数调用参数即可
**注意点:**
- 我假设了每个按钮需要的转生等级是递增5级(5,10,15...45),你可以根据实际需求调整`requiredLevel`参数
- 网络消息参数我设置了33-41的递增序列,你需要根据实际协议调整`netMsgParam`参数
- 每个按钮对应自己的特效(Button_1对应Effect_1,以此类推)
如果你需要不同的转生等级要求或者不同的消息参数,告诉我具体需求,我可以帮你调整。另外,记得检查UI文件中是否有Button_1到Button_9和Effect_1到Effect_9这些控件。
同学,你的代码思路是对的,但有几个地方需要优化和修正。主要问题是逻辑判断有重复,并且对按钮和特效的显示/隐藏控制逻辑不够清晰。我来帮你补全并优化一下。
```lua
local ui, root = GUI:npcUI("shijieditu")
-- 获取当前转生等级
local reLevel = SL:GetMetaValue("RELEVEL") or 0
-- 定义一个函数来处理每个按钮和特效的显示逻辑
local function setupButton(buttonIndex, requiredLevel, effectIndex, netMsgParam)
local buttonName = "Button_" .. buttonIndex
local effectName = "Effect_" .. effectIndex
if GUI:Win_IsNotNull(ui[buttonName]) then
if reLevel >= requiredLevel then
-- 显示按钮
GUI:setVisible(ui[buttonName], true)
GUI:addOnClickEvent(ui[buttonName], function()
SL:print("点击了第" .. buttonIndex .. "个按钮", "转生等级:" .. reLevel)
GUI:delayTouchEnabled(ui[buttonName], 0.2)
SL:SendLuaNetMsg(58003, 0, netMsgParam, 0, 0)
end)
-- 显示对应的特效
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], true)
end
else
-- 隐藏按钮和特效
GUI:setVisible(ui[buttonName], false)
if GUI:Win_IsNotNull(ui[effectName]) then
GUI:setVisible(ui[effectName], false)
end
end
end
end
-- 按照你的要求补全Button_1到Button_9,转生等级最大45级
-- 这里假设每个按钮需要的转生等级递增5级
setupButton(1, 5, 1, 33) -- Button_1: 转生≥5级,发送参数33
setupButton(2, 10, 2, 34) -- Button_2: 转生≥10级,发送参数34
setupButton(3, 15, 3, 35) -- Button_3: 转生≥15级,发送参数35
setupButton(4, 20, 4, 36) -- Button_4: 转生≥20级,发送参数36
setupButton(5, 25, 5, 37) -- Button_5: 转生≥25级,发送参数37
setupButton(6, 30, 6, 38) -- Button_6: 转生≥30级,发送参数38
setupButton(7, 35, 7, 39) -- Button_7: 转生≥35级,发送参数39
setupButton(8, 40, 8, 40) -- Button_8: 转生≥40级,发送参数40
setupButton(9, 45, 9, 41) -- Button_9: 转生≥45级,发送参数41
```
**优化说明:**
1. **函数封装**:使用`setupButton`函数统一处理每个按钮的逻辑,避免代码重复
2. **参数化**:将按钮索引、所需转生等级、特效索引、网络消息参数都作为参数传入
3. **清晰逻辑**:每个按钮只控制自己的显示状态,不会影响其他按钮
4. **扩展性**:如果需要调整转生等级要求或消息参数,只需要修改函数调用参数即可
**注意点:**
- 我假设了每个按钮需要的转生等级是递增5级(5,10,15...45),你可以根据实际需求调整`requiredLevel`参数
- 网络消息参数我设置了33-41的递增序列,你需要根据实际协议调整`netMsgParam`参数
- 每个按钮对应自己的特效(Button_1对应Effect_1,以此类推)
如果你需要不同的转生等级要求或者不同的消息参数,告诉我具体需求,我可以帮你调整。另外,记得检查UI文件中是否有Button_1到Button_9和Effect_1到Effect_9这些控件。
← 返回问答库