local leishen = {}
local function showEffect(msgID, p1, p2, p3, msgData)
local data = SL:JsonDecode(msgData, false) or {}
SL:Print("特效数据", data)
local num = data.num or 0
local eff1, eff2 = data.preEff, data.startEff
-- 创建父节
看了你的代码,错误很明显。在第60行你调用了 `SL:JsonDecodemeData`,但这个函数在浮生梦老师的前端课程内容中并不存在。
根据课程内容,正确的JSON解码函数是 `SL:JsonDecode`。
把第60行代码:
```lua
local timeData = SL:JsonDecodemeData(tiStr, false) or {}
```
修改为:
```lua
local timeData = SL:JsonDecode(timeDataStr, false) or {}
```
同时我还注意到几个问题需要修正:
1. **变量名错误**:你写的是 `tiStr`,但参数名是 `timeDataStr`
2. **拼写错误**:在第67行你写的是 `effecObjects[it]`,应该是 `effectObjects[i]`
3. **定时器使用**:在第98行你用了 `SL:Sleep(1)`,但这不是引擎推荐的方式,应该使用 `SL:ScheduleOnce`
修正后的核心代码部分:
```lua
SL:RegisterLuaNetMsg(2028, function(msgID, p1, p2, p3, timeDataStr)
local timeData = SL:JsonDecode(timeDataStr, false) or {}
local totalCount = timeData.totalCount or 0
local percent = timeData.percent or 0
SL:Print("收到后端倒计时:剩余", totalCount, "秒,百分比", percent)
-- 更新主进度条
if not GUI:Win_IsNull(mainLoadingBar) then
GUI:LoadingBar_setPercent(mainLoadingBar, percent)
end
-- 更新所有特效的倒计时文本
for i = 1, num do
if effectObjects[i] and effectObjects[i].countdownText then
if not GUI:Win_IsNull(effectObjects[i].countdownText) then
GUI:Text_setString(effectObjects[i].countdownText, tostring(totalCount))
effectObjects[i].remain = totalCount
end
-- 当倒计时为0时,触发技能特效并清理
if totalCount == 0 then
if not GUI:Win_IsNull(effectObjects[i].circleEffect) then
-- 创建技能特效
local skillEffect = GUI:Effect_Create(sceneLayer, "skill_effect_" .. i .. math.random(999999),
effectObjects[i].posX, effectObjects[i].posY, 0, eff2, 0, 0, 0, 1)
-- 技能特效动画
if not GUI:Win_IsNull(skillEffect) then
GUI:setOpacity(skillEffect, 255)
local skillAction = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 2.0),
GUI:DelayTime(0.3),
GUI:ActionFadeTo(0.5, 0),
GUI:CallFunc(function()
GUI:removeFromParent(skillEffect)
end)
)
GUI:runAction(skillEffect, skillAction)
end
-- 清理单个特效和文本
if not GUI:Win_IsNull(effectObjects[i].countdownText) then
GUI:removeFromParent(effectObjects[i].countdownText)
end
if not GUI:Win_IsNull(effectObjects[i].circleEffect) then
GUI:removeFromParent(effectObjects[i].circleEffect)
end
end
end
end
end
-- 所有倒计时结束,清理场景
if totalCount == 0 then
SL:ScheduleOnce(sceneLayer, function()
if not GUI:Win_IsNull(sceneLayer) then
GUI:removeFromParent(sceneLayer)
end
SL:UnRegisterLuaNetMsg(2028)
end, 1.0)
end
end)
```
这些都是常见的拼写错误,下次写代码时注意仔细检查函数名和变量名,不懂的随时问我!