你的代码中Boss刷新状态不显示的问题主要出现在时间文本创建和倒计时的逻辑处理上。让我帮你分析并修正:
**主要问题:**
1. 时间文本的创建位置错误 - 被错误地放在了`for m, n in ipairs(bossStatus)`循环内部
2. 倒计时处理逻辑不完整
3. 坐标计算有误
**修正后的代码:**
```lua
function npc:openWin(msgData)
-- 创造外部界面
local win_Boss = GUI:Win_Create("win_Boss", 0, 0, 0, 0)
GUI:LoadExport(win_Boss, "Boss")
npc.ui = GUI:ui_delegate(win_Boss)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_Boss)
end)
local bossStatus = {}
if msgData and msgData ~= "" then
bossStatus = SL:JsonDecode(msgData, true) or {}
end
for k, v in ipairs(npc.BossReliveCfg) do
-- Boss名列表
local panel1 = "Panel1_"..k
local panel_First = GUI:Layout_Create(npc.ui.ListView_1, panel1, 0, 370, 750, 40, false)
-- Boss名称
local text1 = "Text1_"..k
local textName_x = 120 * 0.5 -- 简化计算
local text_Name = GUI:Text_Create(panel_First, text1, textName_x, 6, 16, "#00B100", v.monsterName)
GUI:Text_setFontName(text_Name, "ZiHunJianQiShouShu/ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf")
GUI:Text_enableOutline(text_Name, "#000000", 1)
-- Boss地图名
local text2 = "Text2_"..k
local textMap_x = 750 * 0.5 -- 简化计算
local text_name = GUI:Text_Create(panel_First, text2, textMap_x, 6, 16, "#d90031", v.mapName)
GUI:Text_setFontName(text_name, "ZiHunJianQiShouShu/ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf")
GUI:Text_enableOutline(text_name, "#000000", 1)
-- Boss复活时间 - 这个必须在循环外部创建
local text3 = "Text3_"..k
local textTime_x = 1350 * 0.5 -- 简化计算
local text_Time = GUI:Text_Create(panel_First, text3, textTime_x, 6, 16, "#0000e7", "已刷新")
GUI:Text_setFontName(text_Time, "ZiHunJianQiShouShu/ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf")
GUI:Text_enableOutline(text_Time, "#000000", 1)
-- 检查boss状态
local countDown = 0
for m, n in ipairs(bossStatus) do
if n.monsterName == v.monsterName and n.mapName == v.mapName then
countDown = tonumber(n.time) or 0
break
end
end
-- 设置倒计时或状态
if countDown > 0 then
GUI:Text_setString(text_Time, countDown.."秒")
-- 注意:GUI:Text_COUNTDOWN函数在知识库中未找到,这里使用自定义实现
-- 你可以使用SL:ScheduleOnce来实现倒计时更新
local function updateCountdown()
if countDown > 0 then
countDown = countDown - 1
if countDown > 0 then
GUI:Text_setString(text_Time, countDown.."秒")
SL:ScheduleOnce(updateCountdown, 1)
else
GUI:Text_setString(text_Time, "已刷新")
end
end
end
SL:ScheduleOnce(updateCountdown, 1)
else
GUI:Text_setString(text_Time, "已刷新")
end
end
end
```
**关键修改点:**
1. **时间文本创建位置**:将`text_Time`的创建移到了`for m, n in ipairs(bossStatus)`循环外部,确保每个Boss都有时间显示
2. **坐标计算简化**:使用简单的居中计算,避免复杂的字符串长度计算
3. **倒计时逻辑**:由于知识库中没有`GUI:Text_COUNTDOWN`函数,我使用了`SL:ScheduleOnce`来实现倒计时功能
4. **状态检查**:先创建文本控件,再根据bossStatus设置内容
**建议:**
- 检查字体文件路径是否正确
- 确保ListView_1的尺寸足够容纳所有Boss条目
- 如果倒计时不准确,可以调整`SL:ScheduleOnce`的时间间隔
这样修改后,每个Boss都会显示其刷新状态("已刷新"或倒计时时间)。