DengJiTiSheng = Class("DengJiTiSheng", BaseLogic)
function DengJiTiSheng:init()
self._cfg = Util:requireCfg(self.mCfg.clientObjPath)
end
function DengJiTiSheng:main(npcData)
self.npcData = npcData or {}
self.npcID = self.npcD
你的代码有几个问题需要修正:
## 主要问题:
1. **艺术字控件重复创建**:你在 `updateUI` 函数中直接创建 `TextAtlas_1`,但没有先检查是否已存在
2. **富文本控件处理**:虽然你处理了 `RichText_4`,但 `TextAtlas_1` 也需要同样处理
3. **控件ID冲突**:如果多次调用 `updateUI`,会重复创建相同ID的控件
## 修正后的代码:
```lua
function DengJiTiSheng:updateUI(data)
local ui = self.ui
local level = SL:Get_LEVEL()
if data and type(data) == "number" then
level = data
end
-- 先检查并移除已存在的TextAtlas_1
if not GUI:Win_IsNull(ui.TextAtlas_1) then
GUI:removeFromParent(ui.TextAtlas_1)
ui.TextAtlas_1 = nil
end
-- 创建新的艺术字控件
local levelStr = tostring(level) -- 确保是字符串
ui.TextAtlas_1 = GUI:TextAtlas_Create(ui.RichText_3, "TextAtlas_1", 151, 2,
levelStr, "Default/TextAtlas.png", 14, 18, ".")
local curnLevel = ""
local curnNum = 5
-- 获取当前等级的区间
for _, cfg in pairs(self._cfg) do
local lowStr, highStr = string.match(cfg.level, "(%d+)%-(%d+)")
if lowStr and highStr then
local lowNum = tonumber(lowStr)
local highNum = tonumber(highStr)
if level >= lowNum and level <= highNum then
curnLevel = cfg.level
curnNum = cfg.num
break
end
end
end
curnNum = tonumber(curnNum)
-- 检查并移除已存在的RichText_4
if not GUI:Win_IsNull(ui.RichText_4) then
GUI:removeFromParent(ui.RichText_4)
ui.RichText_4 = nil
end
local str = string.format(
"<font color='#ff9b00' size='14'>【%s级】</font><font color='#ffffff' size='14'>每升1级需要:</font><font color='#00ff00' size='14'>等级丹*%d个</font>",
curnLevel, curnNum)
ui.RichText_4 = GUI:RichText_Create(ui.Img_BG, "RichText_4", 80, 110, str, 300, 16, "#ffffff")
-- 添加按钮点击事件
UILib:addOnClickEvent(ui.Button_1, function()
self:request("TiSheng")
end)
end
```
## 关键改进:
1. **检查控件存在性**:使用 `GUI:Win_IsNull()` 检查控件是否已存在
2. **清理旧控件**:移除旧控件后再创建新控件,避免ID冲突
3. **类型转换**:确保 `level` 转换为字符串传递给艺术字控件
记住,在996引擎中,控件的ID必须是唯一的。每次更新UI时,都要先清理旧的控件再创建新的,或者使用更新函数(如 `GUI:TextAtlas_setString()`)来更新现有控件的内容。
下次写代码时要注意控件的生命周期管理哦!