local moshen = {}
function moshen.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
moshen.parent = lib:openwin(param1, nil, true, param4) or {}
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-20 19:51:12 |
👁️ 阅读: 25
你的ItemShow_3在重新打开界面时消失,是因为每次`upmain()`函数执行时,都会先执行`GUI:removeAllChildren(ui.itemroom)`清空容器,然后重新创建ItemShow_1和ItemShow_2,但ItemShow_3的创建逻辑依赖于条件判断(`u44_level >= 10 and magic_value >= 1000`)。如果条件不满足,ItemShow_3就不会被创建。
主要问题出在**ItemShow_3的创建逻辑被放在了条件判断内部**,且条件可能不满足。
**解决方案:**
将ItemShow_3的创建逻辑移到`if GUI:Win_IsNotNull(ui.itemroom) and next_cfg then`这个主条件块内,确保每次刷新界面时都会根据当前条件判断是否创建它。
以下是修改后的关键代码部分:
```lua
-- 显示物品需求
if GUI:Win_IsNotNull(ui.itemroom) and next_cfg then
GUI:removeAllChildren(ui.itemroom)
-- ... [原有的ItemShow_1和ItemShow_2创建代码] ...
-- 获取等级和魔力值(确保每次都能获取到最新值)
local u44_level = tonumber(SL:GetMetaValue("U44_LEVEL")) or 0
local magic_value = tonumber(SL:GetMetaValue("MAGIC_VALUE")) or 0
-- 检查是否显示ItemShow_3(这个判断应该放在removeAllChildren之后)
if u44_level >= 10 and magic_value >= 1000 then
-- 隐藏Effect_1
if GUI:Win_IsNotNull(ui.Effect_1) then
GUI:setVisible(ui.Effect_1, false)
end
-- 显示ItemShow_3
local current_gemid = 50834 -- 默认ID
-- 根据平台设置坐标
local itemX2, itemY2 = 333, 240
if isMobile == 2 then
itemX2, itemY2 = -455, 280
end
GUI:ItemShow_Create(ui.itemroom, "ItemShow_3", itemX2, itemY2, {
index = current_gemid,
count = 1,
look = true,
bgVisible = false,
})
end
end
```
**关键修改点:**
1. **确保条件判断在`removeAllChildren`之后**:这样每次刷新都会重新判断是否创建ItemShow_3
2. **坐标设置整合**:将ItemShow_3的坐标设置也放到条件判断内部,确保平台适配
3. **变量作用域**:确保`u44_level`和`magic_value`在正确的作用域内获取
这样修改后,每次打开界面或刷新时,只要满足条件(等级≥10且魔力值≥1000),ItemShow_3就会被重新创建出来。
**调试建议:**
你可以在条件判断前添加打印,确认获取到的值是否正确:
```lua
SL:Print("u44_level=" .. u44_level .. ", magic_value=" .. magic_value)
```
如果还有问题,检查一下服务端存储的`U44_LEVEL`和`MAGIC_VALUE`这两个值是否正确设置了。
你的ItemShow_3在重新打开界面时消失,是因为每次`upmain()`函数执行时,都会先执行`GUI:removeAllChildren(ui.itemroom)`清空容器,然后重新创建ItemShow_1和ItemShow_2,但ItemShow_3的创建逻辑依赖于条件判断(`u44_level >= 10 and magic_value >= 1000`)。如果条件不满足,ItemShow_3就不会被创建。
主要问题出在**ItemShow_3的创建逻辑被放在了条件判断内部**,且条件可能不满足。
**解决方案:**
将ItemShow_3的创建逻辑移到`if GUI:Win_IsNotNull(ui.itemroom) and next_cfg then`这个主条件块内,确保每次刷新界面时都会根据当前条件判断是否创建它。
以下是修改后的关键代码部分:
```lua
-- 显示物品需求
if GUI:Win_IsNotNull(ui.itemroom) and next_cfg then
GUI:removeAllChildren(ui.itemroom)
-- ... [原有的ItemShow_1和ItemShow_2创建代码] ...
-- 获取等级和魔力值(确保每次都能获取到最新值)
local u44_level = tonumber(SL:GetMetaValue("U44_LEVEL")) or 0
local magic_value = tonumber(SL:GetMetaValue("MAGIC_VALUE")) or 0
-- 检查是否显示ItemShow_3(这个判断应该放在removeAllChildren之后)
if u44_level >= 10 and magic_value >= 1000 then
-- 隐藏Effect_1
if GUI:Win_IsNotNull(ui.Effect_1) then
GUI:setVisible(ui.Effect_1, false)
end
-- 显示ItemShow_3
local current_gemid = 50834 -- 默认ID
-- 根据平台设置坐标
local itemX2, itemY2 = 333, 240
if isMobile == 2 then
itemX2, itemY2 = -455, 280
end
GUI:ItemShow_Create(ui.itemroom, "ItemShow_3", itemX2, itemY2, {
index = current_gemid,
count = 1,
look = true,
bgVisible = false,
})
end
end
```
**关键修改点:**
1. **确保条件判断在`removeAllChildren`之后**:这样每次刷新都会重新判断是否创建ItemShow_3
2. **坐标设置整合**:将ItemShow_3的坐标设置也放到条件判断内部,确保平台适配
3. **变量作用域**:确保`u44_level`和`magic_value`在正确的作用域内获取
这样修改后,每次打开界面或刷新时,只要满足条件(等级≥10且魔力值≥1000),ItemShow_3就会被重新创建出来。
**调试建议:**
你可以在条件判断前添加打印,确认获取到的值是否正确:
```lua
SL:Print("u44_level=" .. u44_level .. ", magic_value=" .. magic_value)
```
如果还有问题,检查一下服务端存储的`U44_LEVEL`和`MAGIC_VALUE`这两个值是否正确设置了。
← 返回问答库