用资源管理器管理动态加载的龙骨资源,龙骨特效播放完删除节点,资源不释放。切换scene 时释放资源,报上https://forum.cocos.org/uploads/default/original/3X/7/c/7cdcdfb8b8a99f72250dcb8bd3724bceddf09e81.png面一样的警告。查询后发现,dragonBone.js 内 WorldClock中的 this._animatebles 数组一直保持着龙骨的Animate 状态。使用.
let factory = dragonBones.CCFactory.getInstance();
factory.clear();
factory.dragonBones.clock.clear();
浏览器解决了。但是打包android后,直接闪崩。
报错如下:
build/jsb-default/frameworks/cocos2d-x/cocos/editor-support/…\scripting/js-bindings/manual/jsb_conversions.hpp:332: bool native_ptr_to_seval(typename std::enable_if<!std::is_base_of<cocos2d::Ref, T>::value, T>::type *, se::Value *, bool *) [T = dragonBones::DragonBones]: assertion “cls != nullptr” failed’
2020-08-27 14:48:17.344 22706-22706/? A/DEBUG: #02 pc 00000000011eaddc /data/app/org.cocos2d.cm_trunksanguo-y8Qot4lhPusiFo8wnyDyaw==/lib/arm64/libcocos2djs.so (_Z19native_ptr_to_sevalIN11dragonBones11DragonBonesEEbPNSt6__ndk19enable_ifIXntsr3std10is_base_ofIN7cocos2d3RefET_EE5valueES6_E4typeEPN2se5ValueEPb+220)
2020-08-27 14:48:17.344 22706-22706/? A/DEBUG: #03 pc 00000000011ca810 /data/app/org.cocos2d.cm_trunksanguo-y8Qot4lhPusiFo8wnyDyaw==/lib/arm64/libcocos2djs.so
2020-08-27 14:48:17.344 22706-22706/? A/DEBUG: #04 pc 00000000011ca674 /data/app/org.cocos2d.cm_trunksanguo-y8Qot4lhPusiFo8wnyDyaw==/lib/arm64/libcocos2djs.so (js_cocos2dx_dragonbones_CCFactory_getDragonBonesRegistry(v8::FunctionCallbackInfov8::Value const&)+296)
2020-08-27 14:48:17.344 22706-22706/? A/DEBUG: #05 pc 0000000001a60884 /data/app/org.cocos2d.cm_trunksanguo-y8Qot4lhPusiFo8wnyDyaw==/lib/arm64/libcocos2djs.so (v8::internal::FunctionCallbackArguments::Call
最近也遇到这个问题,这个问题修复了吗
导致这个问题的原因是 ArmatureDisplay 组件在还未激活的情况下就将 Armature 对象添加到了 dragonBone 的更新队列,由于组件尚未 enable,因此也不会在 onDisable 和 onDestroy 中进行移除操作,导致了后续的报错。
可以 hook 一下 ArmatureDisplay 的 set armatureName 方法,如果组件还未激活则不执行 clock.add。
Object.defineProperty(cc.internal.ArmatureDisplay.prototype, "armatureName", {
get: function() { return this._armatureName; },
set: function(name: string) {
...
if (this._objFlags & CCObject.Flags.IsOnEnableCalled) {
if (this._armature && !this.isAnimationCached()) {
this._factory!._dragonBones.clock.add(this._armature);
}
}
}
});
1赞
这样改,会影响正常使用吗?
目前为止没发现什么异常。另外 setAnimationCacheMode 方法也要做下类似的判断。
好的 谢谢
看代码是这里没错,不过为什么 iOS 没走进来可能需要你自己调试看看了,我这边是 H5
mark!!!
怎么弄啊,遇到了