WINPLAYMODE was deprecated please use IS_PC_OPER_MODE instead.
*********************************
[LUA-print] [15:06:41-548] [GUI LOG] SendLuaMsg 765 0 0 0 ["BaTianHu","syncData"]
[LUA-print] [15:06:41-631] [GUI LOG] OnLuaMessage 798 0 0 0 ["BaTianHu"
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-25 15:07:47 |
👁️ 阅读: 29
从你的错误信息来看,问题很明确:
**1. 废弃的API调用**
你正在使用 `SL:GetMetaValue("WINPLAYMODE")`,这个函数已经被弃用。引擎现在要求使用 `SL:GetMetaValue("IS_PC_OPER_MODE")` 来判断是否为PC操作模式。
**2. 界面创建/关闭冲突**
错误堆栈显示 `GUI:Win_Create` 时发现窗口 `"BaTianHu"` 已存在,于是尝试关闭它,但 `GUI:Win_Close` 又报告“is valid Win”,这通常意味着窗口状态异常(比如正在关闭过程中又尝试创建)。
**修复方案:**
```lua
-- 1. 替换所有WINPLAYMODE调用
-- 错误写法:
local isPcOld = SL:GetMetaValue("WINPLAYMODE") -- ❌ 已废弃
-- 正确写法:
local isPcNew = SL:GetMetaValue("IS_PC_OPER_MODE") -- ✅ 使用新API
-- 2. 在创建窗口前检查是否已存在并正确处理
function BaTianHu.initUI()
-- 先检查窗口是否已存在
local oldWin = GUI:getChildByName(GUI:getRootNode(), "BaTianHu")
if not GUI:Win_IsNull(oldWin) then
-- 如果窗口存在,先完全关闭再创建
GUI:Win_Close(oldWin)
-- 等待一帧确保窗口完全关闭
SL:ScheduleOnce(function()
BaTianHu.createWindow()
end)
else
BaTianHu.createWindow()
end
end
function BaTianHu.createWindow()
-- 创建父节点
local parent = GUI:Win_Create("BaTianHu", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 根据操作模式加载不同布局
local isPc = SL:GetMetaValue("IS_PC_OPER_MODE")
if isPc then
GUI:LoadExport(parent, "batianhu/ba_tian_hu_win32")
else
GUI:LoadExport(parent, "batianhu/ba_tian_hu")
end
-- 其他初始化代码...
end
```
**关键点:**
- 所有使用 `WINPLAYMODE` 的地方都要改为 `IS_PC_OPER_MODE`
- 窗口创建前要做好状态检查,避免重复创建
- 使用 `SL:ScheduleOnce` 来延迟创建,确保旧窗口完全关闭
这个错误是典型的API升级和资源管理问题,按照上面的方法修改就能解决。
← 返回问答库