local npc = {}
npc.BossReliveCfg = {
[1] = {
monsterName = "牛魔王",
mapName = "牛魔寺庙",
reliveTime = 120
},
[2] = {
monsterName = "黑狐",
mapName = "狐月山",
reliveTime = 120
},
[3] = {
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-15 19:05:37 |
👁️ 阅读: 3
在浮生梦老师前端课程内容中,要实现BOSS击杀后开始倒计时并在结束时改变文本,需要修正几个关键点:
1. **缺少BossCD初始化**:需要在`openWin`函数前初始化冷却数据
2. **倒计时函数使用错误**:应该使用`SL:Text_COUNTDOWN`而不是`GUI:Text_COUNTDOWN`
3. **坐标计算问题**:文本位置计算需要调整
以下是修正后的代码:
```lua
-- 在openWin函数前初始化冷却数据
npc.BossCD = {}
for k, v in ipairs(npc.BossReliveCfg) do
npc.BossCD[k] = {
isCD = false,
leftTime = 0
}
end
function npc:openWin()
-- 创建界面
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)
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)
local text1 = "Text1_"..k
local textName_x = 60 -- 简化坐标计算
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 = 375 -- 居中位置
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 = 650 -- 右侧位置
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)
-- 保存文本引用
v.timeText = text_Time
end
end
function npc:checkTime(msgData)
local targetIndex = nil
-- 匹配怪物名
for k, v in ipairs(npc.BossReliveCfg) do
if v.monsterName and string.find(v.monsterName, msgData, 1, true) then
targetIndex = k
break
end
end
if not targetIndex then
SL:print("未找到该BOSS配置")
return
end
local cfg = npc.BossReliveCfg[targetIndex]
local cdCfg = npc.BossCD[targetIndex]
-- 标记进入冷却
cdCfg.isCD = true
cdCfg.leftTime = cfg.reliveTime
local text_Time = cfg.timeText
if not text_Time then return end
-- 设置倒计时文本
GUI:Text_setString(text_Time, tostring(cfg.reliveTime).."秒")
-- 使用正确的倒计时函数
SL:Text_COUNTDOWN(text_Time, cfg.reliveTime, function()
-- 倒计时结束
npc.BossCD[targetIndex].isCD = false
GUI:Text_setString(text_Time, "已刷新")
GUI:Text_setTextColor(text_Time, "#0000e7") -- 恢复颜色
end, 0)
end
```
主要修改点:
1. 添加了`npc.BossCD`初始化,用于跟踪每个BOSS的冷却状态
2. 简化了坐标计算,使用固定值确保文本位置正确
3. 将`GUI:Text_COUNTDOWN`改为`SL:Text_COUNTDOWN`(根据浮生梦老师前端课程内容,这是正确的倒计时函数)
4. 倒计时开始时设置秒数显示,结束时改为"已刷新"
这样当后端发送消息ID为1024且p2=1、p3=0时,就会触发对应BOSS的倒计时,倒计时结束后文本会自动变为"已刷新"。
← 返回问答库