CheckZBDataOBJ = {}
CheckZBDataOBJ.__cname = "CheckZBDataOBJ"
local att_db = { --需要对比的属性表
{
4, 10, 12
},
{
6, 10, 12
},
{
8, 10, 12
},
}
local jn_tab = {
30001, 30002, 30003
}
local not_db = {
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-07-01 14:03:10 |
👁️ 阅读: 7
根据你提供的 `CheckZBDataOBJ.lua` 代码,我发现了几个问题:
## 主要问题:
1. **函数返回值不一致**:
- `ZB_DB` 函数在某些情况下返回 `false`,在某些情况下返回 `true`,在某些情况下返回 `true, _pos`
- 但在第403行调用时,可能期望的是一个控件对象,而这里返回的是布尔值或位置
2. **缺少控件创建**:
- 从代码看,`ZB_DB` 函数主要是进行装备对比逻辑判断
- 没有创建任何GUI控件(如文本控件)
- 返回的是布尔值和位置信息,不是控件对象
## 修复建议:
根据你之前提到的错误发生在 `MainProperty_win32.lua` 第403行,应该是这样调用的:
```lua
local textWidget = GUI:Text_Create(parent, "text_id", x, y, size, color, "初始文本")
GUI:Text_setString(textWidget, "新文本") -- 第403行
```
而 `CheckZBDataOBJ:ZB_DB` 返回的不是控件对象,所以会报错。
## 正确的调用方式:
```lua
-- 先创建文本控件
local textWidget = GUI:Text_Create(parentNode, "Text_equipCompare", 0, 0, 14, "#ffffff", "")
-- 获取对比结果
local compareResult, equipPos = CheckZBDataOBJ:ZB_DB(equipData, from, true)
-- 设置文本前检查控件
if not GUI:Win_IsNull(textWidget) then
if compareResult then
GUI:Text_setString(textWidget, "装备可替换" .. (equipPos or ""))
else
GUI:Text_setString(textWidget, "装备无需替换")
end
else
SL:Print("错误:文本控件无效")
end
```
## 问题根源:
`CheckZBDataOBJ:ZB_DB` 函数设计用于装备对比逻辑判断,不是用于创建或返回GUI控件。你需要:
1. 在调用 `GUI:Text_setString` 的地方,确保传入的是有效的文本控件对象
2. 将 `ZB_DB` 的返回结果转换为字符串显示
如果你需要进一步调试,请告诉我 `MainProperty_win32.lua` 第403行具体的代码内容。
← 返回问答库