05/022 浏览
现在完全清楚了。"半径"参数控制的是敌人在关卡地图上的绘制尺寸(像素半径)。
默认值范围大概在 5-15 之间(面包块默认 12,鸡肉碎块默认 10),你改成 10 和默认值差距很小,所以看不出明显变化。
但从截图来看,"面包"NPC 在关卡中已经成功刷出来了(图1左上区域有一个小的饼干/面包造型精灵)。这说明之前的绑定修复已经生效了。
关于"半径"的说明:
它控制敌人在游戏关卡中的显示大小,精灵绘制尺寸 = radius * 2.4
默认面包块 radius = 12,你改成 10 只缩小了约 17%,变化不明显
想看到明显效果,可以试试改成 20-25(会变得很大)或 5(会变得很小)
这个半径同时影响碰撞判定范围和血条位置
简单说:半径 = 敌人在地图上的视觉大小和碰撞范围,改成 10 与默认值(12)差距太小所以看不出来。
数据流完全正确:用户点 +/- → stats[def.key] = cur → editorState.gameStats 更新 → buildSaveData() 包含 gameStats → 保存到云端。
问题找到了! 保存 NPC 数据时,gameStats 被保存了,但问题是:保存后需要重新进入关卡才能生效。NPC编辑器中修改属性 → 保存 → 返回关卡时,Render.LoadNpcSprites 从保存的数据中重新读取 gameStats 并调用 SetNpcGameStats。
但真正的问题可能是:NPC 保存操作没有触发保存。
保存逻辑没有问题。数据确实被保存了(包含 gameStats.radius = 25)。
真正的根因:问题出在 Render.LoadNpcSprites 加载数据的时机。用户改了 radius 后在编辑器中保存了,但返回关卡时 NPC 精灵缓存已经被我们之前的 InvalidateNpcCache 清了,所以 LoadNpcSprites 会重新加载。
数据加载和 SetNpcGameStats 的调用完全正确。但等等——我注意到一个关键问题!
Render.InvalidateNpcCache() 只清除了精灵像素缓存,但没有清除 npcGameStatsCache_。当 LoadNpcSprites 被调用后重新从文件加载数据,会调用 SetNpcGameStats 更新 npcGameStatsCache_。所以这部分是OK的。
让我加打印日志来验证是否 radius 被正确传递。但更直接的方式是检查 NPC 的 gameStats 在绑定面板的显示和保存中的格式。
我重新审视问题。用户说改了半径到 25,但在游戏中看不到变化。
核心问题可能是:"面包"这个 NPC 绑定到了一个 enemyType,但这个 enemyType 的默认 radius 就已经很小。NPC 编辑器改的 gameStats.radius 是存在 NPC 数据中的,但需要通过 enemyType 映射才能生效。如果"面包"被绑定到了 bread(面包块,默认 radius=12),那改成 25 应该明显变大。
TapTap
1