DengJiTiSheng = {}
function DengJiTiSheng:init()
self._cfg = Util:requireCfg(self.mCfg.clientObjPath)
end
function DengJiTiSheng:main(npcData)
self.npcData = npcData or {}
self.npcID = self.npcData.npcID or 99999
-- self:syncData(t
这个错误是典型的"attempt to index a nil value"(尝试索引空值),问题出在第39行`ui.RichText_3`这个变量是nil。
让我分析你的代码:
```lua
-- 问题出现在第39行:
local TextAtlas_1 = GUI:TextAtlas_Create(ui.RichText_3, "TextAtlas_1", 151, 2, level, "Default/TextAtlas.png", 14, 18, ".")
-- ui.RichText_3 是 nil 值,所以报错
```
**主要问题:**
1. **ui 对象未初始化**:在`updateUI`函数中,你使用了`ui.RichText_3`,但这个ui对象并没有被正确赋值
2. **缺少UI创建**:代码中注释掉了UI的创建部分
**修复方案:**
```lua
function DengJiTiSheng:initUI(data)
-- 先创建UI对象
UIManager:winCreate(self)
-- 关键:获取UI对象
self.ui = GUI:ui_delegate(self.parent, self._cfg) -- 根据浮生梦老师前端课程内容
-- 然后才能使用ui对象
UIManager.widget_scale(self.parent, math.random(3), 0.15)
-- 添加按钮点击事件(如果按钮存在)
if self.ui.Button_1 then
GUI:addOnClickEvent(self.ui.Button_1, function()
self:request("JiTiSheng")
end)
end
-- 更新UI数据
self:updateUI(data)
end
function DengJiTiSheng:updateUI(data, Donatenum)
-- 检查ui对象是否存在
if not self.ui then
SL:print("ui对象未初始化")
return
end
local ui = self.ui
local page = self._cfg
local level = SL:Get_LEVEL()
-- 检查RichText_3是否存在
if GUI:Win_IsNull(ui.RichText_3) then
SL:print("RichText_3控件不存在")
return
end
-- 先移除旧的TextAtlas(如果存在)
local oldTextAtlas = GUI:getChildByName(ui.RichText_3, "TextAtlas_1")
if not GUI:Win_IsNull(oldTextAtlas) then
GUI:removeFromParent(oldTextAtlas)
end
-- 创建新的TextAtlas
local TextAtlas_1 = GUI:TextAtlas_Create(ui.RichText_3, "TextAtlas_1", 151, 2, level, "Default/TextAtlas.png", 14, 18, ".")
local curnLevel = page.level or 1
local curnNum = page.num or 1
-- 设置文本内容
if ui.RichText_4 and not GUI:Win_IsNull(ui.RichText_4) then
GUI:RichText_setString(ui.RichText_4, string.format("【%d】级 每升1级需要:等级丹*%d个", curnLevel, curnNum))
end
end
```
**关键点提醒:**
1. 使用UI控件前一定要检查是否为空:`GUI:Win_IsNull(widget)`
2. 创建UI后要获取ui对象:`self.ui = GUI:ui_delegate(self.parent, self._cfg)`
3. 所有打印使用:`SL:print()` 而不是 `print()`
下次写代码时记得先初始化UI对象再使用,不懂的可以问浮生梦老师!