###销毁 dragonBones节点的时候报错 loopComplete of null
版本: 2.1.0
运行环境 web 谷歌浏览器
###操作逻辑
- 动态创建 带有 dragonBones的预制体
- 播放 预制体死亡动画
- 销毁 预制体
###代码片段
utils.getDaoguang( `/remoteRes/boss/${ conf.enemyRes }`, `${ conf.enemyRes }`, ( data ) => {
if ( self.curBoss ) {
self.curBoss = null;
}
self.curBoss = cc.instantiate( self.bossObj );
self.curBoss.x = 0;
self.curBoss.y = 0;
self.bossPos.addChild( self.curBoss );
let com = self.curBoss.getComponent( 'BossObject' );
com.setDragonBones( data );
} );
###class utils
utils.getDaoguang = function ( path, name, callback ) {
let res = cc.loader.getRes( `${ path }/${ name }_ske.json` );
if ( res ) {
let atlasRes = cc.loader.getRes( `${ path }/${ name }_tex.json`,dragonBones.DragonBonesAtlasAsset );
let dragonAsset = {};
dragonAsset.asset = res;
dragonAsset.atlasAsset = atlasRes;
cc.loader.setAutoReleaseRecursively(res,true);
cc.loader.setAutoReleaseRecursively( atlasRes , true );
callback && callback( dragonAsset );
} else {
cc.loader.loadResDir( `${ path }/`, () => {
}, ( err, assets ) => {
if ( err ) {
cc.error( '加载报错', path );
return;
}
if ( assets.length <= 0 ) {
return;
}
let dragonAsset = {};
for ( const i in assets ) {
cc.loader.setAutoReleaseRecursively(assets[i],true);
if ( assets[ i ] instanceof dragonBones.DragonBonesAsset ) {
dragonAsset.asset = assets[ i ];
} else if ( assets[ i ] instanceof dragonBones.DragonBonesAtlasAsset ) {
dragonAsset.atlasAsset = assets[ i ];
}
}
callback && callback( dragonAsset );
} );
}
};
龙骨node 绑定脚本
onComplete( event ) {
this._curArmatureName = this._armationDisplay.armatureName;
if ( this._curArmatureName === gameGlobal.ENUM.boosAct.IDLE || this._curArmatureName === gameGlobal.ENUM.boosAct.DEATH ) {
if ( this._curArmatureName === gameGlobal.ENUM.boosAct.DEATH ) {
this.node.removeComponent( dragonBones.ArmatureDisplay );
// 死掉
this.node.parent.destroy();
}
return;
}
this.playArmatureByName( gameGlobal.ENUM.boosAct.IDLE );
},
onDisable() {
cc.loader.release( this._armationDisplay.dragonAsset );
cc.loader.release( this._armationDisplay.dragonAtlasAsset );
cc.sys.garbageCollect();
this._armationDisplay.off( dragonBones.EventObject.COMPLETE, this.onComplete, this );
},
PS:
如果在 onDisable 中用 cc.loader.release( this._armationDisplay.dragonAsset ); cc.loader.release( this._armationDisplay.dragonAtlasAsset ); 就不报loopComplete of null的错误.而是循环发出
The armature data has been disposed.
Please make sure dispose armature before call factory.clear().
的警告;


