local lianhuo = {}
function lianhuo.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
lianhuo.parent = lib:openwin(param1, nil, true, param4) or {}
看了你的代码,发现有几个地方需要调整:
## 主要问题分析:
### 1. **动画播放逻辑问题**
在你的网络回调函数中,`data.result == "success"`时播放的是`Text_3`动画,而`data.result == "fail"`时播放的是`Text_4`动画。
但是从你的描述看,你想要的是:
- 上交成功 → 播放Text_3动画 ✓(代码正确)
- 上交失败 → 播放Text_4动画 ✓(代码正确)
但你说"上交成功的时候没有播放Text_4的动画",这可能是期望错误,因为成功应该播放Text_3,不是Text_4。
### 2. **潜在的问题点**
```lua
-- 这里可能有问题:data.result的值可能不是"success"或"fail"字符串
if data.result then
-- 如果data.result是true/false布尔值,这里会出错
if data.result == "success" then
-- 播放Text_3
elseif data.result == "fail" then
-- 播放Text_4
end
end
```
### 3. **建议的调试方法**
```lua
SL:RegisterLuaNetMsg(58003, function(msgID, p1, p2, p3, msgData)
local data = SL:JsonDecode(msgData)
-- 添加调试打印
SL:Print("收到58003消息,data内容:", data)
if data then
SL:Print("data.result类型:", type(data.result))
SL:Print("data.result值:", data.result)
end
if data and data.result then
-- 根据实际数据类型调整判断
if tostring(data.result) == "success" then
SL:Print("播放成功动画(Text_3)")
-- 播放Text_3动画
elseif tostring(data.result) == "fail" then
SL:Print("播放失败动画(Text_4)")
-- 播放Text_4动画
else
SL:Print("未知的result值:", data.result)
end
end
end, lianhuo.parent)
```
### 4. **动画函数优化**
建议将动画播放封装成函数:
```lua
local function playResultAnimation(textWidget, isSuccess)
if GUI:Win_IsNull(textWidget) then return end
-- 先停止所有动作
GUI:stopAllActions(textWidget)
-- 设置初始状态
GUI:setVisible(textWidget, true)
GUI:setOpacity(textWidget, 0)
local pos = GUI:getPosition(textWidget)
GUI:setPosition(textWidget, pos.x, pos.y - 50)
-- 创建动画序列
local actionSequence = GUI:ActionSequence(
GUI:ActionFadeIn(0.3),
GUI:ActionMoveBy(0.5, 0, 50),
GUI:DelayTime(1),
GUI:ActionFadeOut(0.3),
GUI:CallFunc(function()
GUI:setVisible(textWidget, false)
GUI:setPosition(textWidget, pos.x, pos.y)
end)
)
GUI:runAction(textWidget, actionSequence)
SL:Print(isSuccess and "播放成功动画" or "播放失败动画")
end
```
然后在网络回调中使用:
```lua
if data and data.result then
local resultStr = tostring(data.result)
if resultStr == "success" then
if not GUI:Win_IsNull(ui.Text_3) then
playResultAnimation(ui.Text_3, true)
end
elseif resultStr == "fail" then
if not GUI:Win_IsNull(ui.Text_4) then
playResultAnimation(ui.Text_4, false)
end
end
end
```
## 检查步骤:
1. **先添加调试打印**,确认服务端返回的数据格式
2. **检查控件是否有效**:确保`ui.Text_3`和`ui.Text_4`控件存在且不为空
3. **检查动画时机**:确保动画在控件创建完成后再播放
如果还有问题,可以把调试打印的结果发出来看看!