下载 App

KTX 格式解析错误

05/102 浏览
明白了,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 错误。
生成正面、背面、侧面,可以走动的角色形象截图
生成正面、背面、侧面,可以走动的角色形象
当前 NPC 角色编辑器的数据结构 编辑器使用 32×32 像素画布,数据结构大致是: 3 个朝向:正面、背面、侧面 2 个动画状态:静止(idle)、行走(walk) 每个状态可以有多帧,支持帧率控制 每帧本质上是一个 32×32 的颜色数组 要解决的 3 个问题 步骤 问题 方案 1. 图片→编辑器 128×128 PNG 导入为 32×32 像素数据 加载图片后逐像素采样(每4×4取1像素)
1 赞
9 回复
【日常更新】支持2人、3人、4人对战截图
【日常更新】支持2人、3人、4人对战
优化了排行榜显示玩家昵称
3 赞
地图编辑器仿真 tick 重建抑制
UI 重建频率 = 事件分发的可靠性上限。 只要有一帧 SetRoot 销毁了正在处理 pointer 事件的控件,跨重建边界的 Down/Up 对就会被吞。高频仿真 tick 必须在 UI 边界按页面过滤。 关键代码(scripts/main.lua HandleUpdate) 四步走:先原地处理人员 → 聚合所有仿真 changed → 地图页强制压制 → 只放行显式/登录态变化。 -- ma
官方
4 赞
穿透层修复
经验一:CSS transform 穿透层修复模式 问题本质 当容器使用 CSS transform: translateX/Y/scale 平移/缩放子树时,即使父容器有 overflow = "hidden",引擎的命中检测可能不裁剪越界区域。如果 transform 后的子树有更高的 zIndex,它会在视觉范围外拦截其他兄弟节点的指针事件。 受影响的场景 地图编辑器(右键平移/滚轮缩放后)
官方
4 赞
右键拖拽平移
一、问题本质 不是平移公式写错,而是 UrhoX UI 库指针事件派发的两个不对称陷阱叠加: 陷阱 现象 根因文件 OnPointerMove 不向父冒泡 右键按下 isPanning_=true,但 move 事件永远到不了 mapView urhox-libs/UI/Core/Widget.lua(OnPointerDown/Up 有 parent 冒泡,OnPointerMove 没有) H
官方
4 赞
以鼠标为锚点缩放
核心数学原理 缩放前后,鼠标指向的那个世界坐标点必须保持在同一屏幕位置。 已知:旧缩放 oldZoom、新缩放 newZoom、鼠标锚点屏幕坐标 (ax, ay)、当前偏移 (panX, panY) 步骤1:算出旧缩放下鼠标指向的世界坐标 wx = (ax - panX) / oldZoom wy = (ay - panY) / oldZoom 步骤2:新缩放后反解新偏移,让 wx/wy
官方
1 赞
四个原则(数据驱动、组件化、组合优于继承、对象池)
四个原则(数据驱动、组件化、组合优于继承、对象池)确实是系统从"能跑"到"能维护"的分水岭。 先看看你的游戏现状,再说怎么落地。 你的游戏现状分析 你的《自由的校园》不是传统战斗游戏,但已经有大量"对抗性交互": 已有机制 对应战斗系统概念 主角投掷物品(粉笔、扫把) 投射物 / 技能 行为违规 → 目击 → 怀疑累积 Debuff 叠加 冲突事件 → 保安响应 Boss 技能 / AI 响应链
官方
4 赞
编辑器实体 zIndex 层级
问题 编辑器中墙段被房间面板覆盖不可见。原因:给房间设 zIndex=1 会创建 stacking context,其内部带背景色/TiledImage 的 floorLayer 作为 paint layer 在合成时盖过了同层级 zIndex=2 的墙段——差距太小不够可靠。 解决:底层不设 zIndex,上层用明显间距 错误做法(zIndex 间距太小 + 给底层也设 zIndex): --
官方
1 赞
精灵平滑移动、墙碰撞体积
一、 渲染层用连续坐标(scripts/页面/校园地图.lua,三处统一): -- NPC 定位(第408-410行) local contLeft = (character.x or 0) * 5 - 18 - charLeft local contTop = (character.y or 0) * 5 - 36 - charTop -- 主角定位(第504-506行) local con
官方
1 赞
碰撞方案
核心教训 1. 格子像素必须匹配精灵尺寸 5px格子+36px精灵=7.2:1比例,任何碰撞方案(AABB/空气墙/单点/格中心)都无法同时满足"不穿墙+四面间距一致+不跳格"。对齐环世界32px后,36px精灵≈1.1格,问题根本解决。 2. 连续渲染 + 格级碰撞的分层设计 渲染用连续坐标 x*S-18(平滑不跳),碰撞用格级检测(不穿墙),二者解耦。 3. 精灵大于格子时,单点检测必然不对称
官方
1 赞