KTX 格式解析错误
05/101 浏览综合
明白了,cache:GetResource("Image", ...) 虽然功能正确但会触发 KTX 格式解析错误。需要找一种不走格式解析的方式来预取文件数据。
让我检查可用的 API。
修改已完成:
将 cache:GetResource("Image", DROP_TEXTURE) 替换为 cache:GetFile(DROP_TEXTURE)。两者都会在 WASM 环境中触发文件下载到本地缓存,区别在于:
GetResource("Image", ...) → 调用 Image::BeginLoad → 尝试 KTX 格式解析 → 失败报错 → 再回退 PNG 解析
GetFile(...) → 只打开文件流,不做任何格式解析 → 无错误日志
后续 nvgCreateImage 在 renderFunc 中首次被调用时,文件数据已在本地缓存中,可以立即加载成功。
构建成功。新方案的工作原理:
彻底移除了所有预加载调用(cache:GetResource 和 cache:GetFile 都不再使用),改为纹理就绪检测 + 动画暂停机制:
renderFunc 每帧重试:nvgCreateImage 返回无效句柄时不缓存,下一帧再试。加载成功时缓存句柄并设 texState.ready = true
STATE_FALLING 动画暂停:_texState.ready == false 时不推进动画计时器,掉落物停在初始位置(不可见,因为 renderFunc 直接 return)
纹理加载完成后自动恢复:texState.ready = true → 动画计时器开始推进 → 完整的掉落动画播放
log.level = LOG_NONE 临时抑制 — 预加载调用前后临时关闭日志,Image 加载器的 KTX 格式探测错误不会被记录
lua
复制
local savedLogLevel = log.level
log.level = LOG_NONE
cache:GetResource("Image", DROP_TEXTURE)
log.level = savedLogLevel
DropSystem.lua — KTX 日志抑制加固
LOG_NONE 可能在 Lua 运行时未绑定为数值,增加 type() 检测并以数值 5 作为保底,确保日志抑制生效
DropSystem.lua — KTX 错误修复
改用 cache:GetResource("Texture2D", DROP_TEXTURE) 预加载,Texture2D 走不同的加载路径,可能绕过 Image 加载器的 KTX 格式探测错误
请测试验证:砍树后站在附近按住空格,先捡脚下的,捡完后会自动拾取稍远处(3 格内)的掉落物。同时观察控制台是否还有 KTX 错误。


