根据你提供的代码,主要问题是在抽奖动画结束后需要刷新红点显示。从代码中可以看到,`createItemShow()`函数负责创建奖励道具和红点,但抽奖动画结束后没有重新调用这个函数来刷新红点状态。
以下是修改建议:
```lua
-- 在lotteryAnim函数中,动画播放完毕后的回调部分修改:
actionList[#actionList + 1] = GUI:CallFunc(function()
-- 动画播放完毕,解禁按钮
GUI:setEnabled(self.ui.btn_lottery, true)
-- 注:发送的奖励idx需要在服务端随机后存放于人物变量上
-- 刷新红点显示
self:createItemShow()
SL:SendLuaNetMsg(1110, 1, 1, 0, tostring(cur_idx))
end)
```
同时,在`createItemShow()`函数中,建议先清理已存在的红点,避免重复创建:
```lua
function zhuanpanOBJ:createItemShow()
-- 先清理已存在的红点
for i = 1, 9 do
local item = self.ui["item_" .. i]
if item and not GUI:Win_IsNull(item) then
local oldRedDot = GUI:getChildByName(item, "Image_bg_" .. i)
if oldRedDot and not GUI:Win_IsNull(oldRedDot) then
GUI:removeFromParent(oldRedDot)
end
end
end
-- 重新创建红点
for i = 1, 9 do
local cfgData = self.cfg[i]
local item = GUI:ItemShow_Create(self.ui["item_" .. i], "item", 0, 0,
{ index = cfgData.showReward[1][1], look = true, count = cfgData.showReward[1][2] })
GUI:setAnchorPoint(item, 0.5, 0.5)
-- 检查数据有效性
if self.Data and self.Data[1] and self.Data[1].reward and self.Data[1].reward[i] == 1 then
-- 添加红点标记已获取
local imgPath = "res/custom/common/zt/zaixian1.png"
local Image_bg = GUI:Image_Create(item, "Image_bg_" .. i, -25, -15, imgPath)
end
end
end
```
另外,在收到服务端消息时也需要刷新红点:
```lua
SL:RegisterLuaNetMsg(1200, function(msgID, p1, p2, p3, msgData)
zhuanpanOBJ.Data = msgData and SL:JsonDecode(msgData) or nil
zhuanpanOBJ:main(p2, p3, msgData)
-- 刷新红点显示
zhuanpanOBJ:createItemShow()
if p2 ~= 0 then
zhuanpanOBJ:lotteryAnim(p3)
end
end)
```
这样修改后,每次抽奖动画结束和收到服务端消息时都会重新刷新红点显示,确保红点状态与数据同步。
注意:`GUI:ItemShow_Create`函数需要确保在浮生梦老师前端课程内容中存在,如果不存在需要替换为相应的创建道具显示的函数。