Creator版本2.4.13
目标平台:Android
构建发布之后,用AndroidStudio调试项目,在场景切换时候报错this._nativeSkeleton.destroy is not a function。Error 5000, please go to https://github.com/cocos/cocos-engine/blob/v3.8.4/EngineErrorMap.md#5000
就是spine被多次释放,导致程序报错卡死。然后我删除项目所有的spine资源,以及引用的地方,再次构建发布,项目可以正常运行,最后尝试加入一个spine动画,然后再次构建发布,运行依然报错。
最后切回版本2.4.12,添加spine动画,构建发布,运行一切正常,在此记录一下,希望能帮助遇到此错误的同学,也希望引擎组的大大们,能够fix一下。
2赞
2.4放弃吧,以后新项目最好是用3.x
2.4.14,同样
确实,2.4.14仍然存在
刚从2.4.11升级到2.4.15 就报了这个错, 15版本还没修复吗??
我用的2.4.12
只能降级 不然没办法
可以解决, 以下是AI给出的解决方案, 测试可行
/******************************************** start ****************************************************/
报错: this._nativeSkeleton.destroy is not a function 终极解决方案
这个报错 100% 是升级 2.4.15 后最典型的龙骨(DragonBones)/Spine 兼容问题 ,我直接给你最精准的原因和一键修复方案。
一、报错根本原因
- 2.4.11 → 2.4.15 引擎内部修复了骨骼动画底层
- 旧版:
_nativeSkeleton是 节点 / 对象 ,有destroy()方法 - 新版:
_privateSkeleton/_nativeSkeleton变成了 纯数据对象 , 没有 destroy () 方法
- 你代码里手动调用了:
js
this._nativeSkeleton.destroy();
// 新版不存在这个方法,直接报错
- 这个变量 不需要手动销毁 ,引擎会自动管理,强行调用就报错。
二、最快修复(2 秒搞定)
方案 1:直接删除这行代码(推荐)
找到报错的代码行, 直接删掉 :
js
// 删掉这一行!
this._nativeSkeleton.destroy();
方案 2:加判断兼容新旧版本(稳妥)
如果你不想删,就加个判断:
js
// 安全写法,有方法才调用
if (this._nativeSkeleton && this._nativeSkeleton.destroy) {
this._nativeSkeleton.destroy();
}
三、90% 的人报错位置在这里
你大概率是在 龙骨 / Spine 组件销毁、场景切换 的地方写了:
js
// 错误代码(2.4.15 废弃)
onDestroy() {
this._nativeSkeleton.destroy();
}
正确写法(新版 2.4.15)
js
onDestroy() {
// 只需要销毁组件本身即可
if (this.dragonBone) {
this.dragonBone.destroy();
}
// 不要动 _nativeSkeleton 这个内部变量!
}
四、为什么升级后突然报错?
-
_nativeSkeleton是 引擎内部私有变量 (下划线开头 = 不允许外部调用) - 2.4.12+ 官方重构了骨骼动画底层
- 私有变量结构变了, 你强行调用就会崩
五、额外检查(避免后续再崩)
- 检查项目中所有 dragonBones.ArmatureDisplay 代码
- 不要直接操作:
_nativeSkeleton_privateSkeleton_armature
- 这些都是 引擎内部变量 ,外部禁止调用、禁止销毁
总结
- 报错原因: 新版引擎移除了
_nativeSkeleton.destroy()方法 - 修复: 直接删除这行代码 即可
- 规则: 下划线开头的引擎私有变量,不要手动 destroy
你把报错那行代码删掉,立刻就能正常运行!
/******************************************** end ****************************************************/
我的改动是,android工程编译后 在\jsb-link\jsb-adapter 下找到jsb-engine.js
注释掉 this._nativeSkeleton.destroy();
打包测试,正常运行。
麻烦的是可能每次生成Android工程都要手动改一下
1赞
牛啊,兄弟