local function networkCB(msgID, msgData)
local parent = GUI:Attach_RightTop()
local ui = GUI:ui_delegate(parent)
local tag = GUI:getTag(ui['bt_11'])
SL:print(tag)
if tag == -1 then
GUI:setTag(ui['bt_11'],1)
G
根据你提供的代码,问题出在你对`tag`的判断逻辑上。让我分析一下:
```lua
local function networkCB(msgID, msgData)
local parent = GUI:Attach_RightTop()
local ui = GUI:ui_delegate(parent)
local tag = GUI:getTag(ui['bt_11'])
SL:print(tag)
if tag == -1 then
GUI:setTag(ui['bt_11'],1)
GUI:addOnClickEvent(ui['bt_11'],function ()
for i = 1 , 10 do
GUI:setOpacity(ui['bt_'..i], 255)
local fadeOutAction = GUI:ActionFadeTo(0.5, 0)
local hideFunc = GUI:CallFunc(function()
GUI:setVisible(ui['bt_'..i], false)
end)
GUI:runAction(ui['bt_'..i], GUI:ActionSequence(fadeOutAction, hideFunc))
end
end)
end
if tag == 1 then
GUI:setTag(ui['bt_11'],-1)
-- zhankai(ui)
end
end
SL:RegisterNetMsg(1000, networkCB)
```
**问题分析:**
1. **逻辑冲突**:当`tag == -1`时,你设置了`tag = 1`并添加了点击事件。当`tag == 1`时,你又设置`tag = -1`。这样每次触发网络消息时,两个条件都会执行!
2. **事件重复添加**:每次`tag == -1`时都会给`bt_11`添加新的点击事件,这可能导致事件冲突。
3. **应该使用`elseif`**:这两个条件是互斥的,应该用`elseif`连接。
**修正后的代码:**
```lua
local function networkCB(msgID, msgData)
local parent = GUI:Attach_RightTop()
local ui = GUI:ui_delegate(parent)
local tag = GUI:getTag(ui['bt_11'])
SL:print("当前tag值:", tag)
if tag == -1 then
GUI:setTag(ui['bt_11'], 1)
-- 先清除可能存在的旧事件
GUI:removeOnClickEvent(ui['bt_11'])
GUI:addOnClickEvent(ui['bt_11'], function()
for i = 1, 10 do
GUI:setOpacity(ui['bt_'..i], 255)
local fadeOutAction = GUI:ActionFadeTo(0.5, 0)
local hideFunc = GUI:CallFunc(function()
GUI:setVisible(ui['bt_'..i], false)
end)
GUI:runAction(ui['bt_'..i], GUI:ActionSequence(fadeOutAction, hideFunc))
end
end)
SL:print("已设置tag为1,并添加点击事件")
elseif tag == 1 then
GUI:setTag(ui['bt_11'], -1)
-- 这里可以添加展开逻辑
-- zhankai(ui)
SL:print("已设置tag为-1")
else
-- 处理其他情况
SL:print("tag值为其他:", tag)
end
end
SL:RegisterNetMsg(1000, networkCB)
```
**主要修改:**
1. 将第二个`if`改为`elseif`,确保两个条件不会同时执行
2. 添加了调试信息,方便追踪执行流程
3. 在添加新事件前先清除旧事件
**建议:**
- 检查`GUI:ui_delegate(parent)`是否每次都正确返回UI表
- 确保网络消息能正常触发多次
- 如果问题依然存在,可以在函数开头添加`SL:print("网络消息触发")`来确认是否每次都能进入函数
下次写条件判断时要注意逻辑的互斥性,不懂的地方可以随时问我!