实现本地及远程的加载释放,之前的帖子里,释放资源不完全,导致循环加载时,显示错乱,已解决。
const {ccclass, property} = cc._decorator;
const BONES_HTTP_RES = [
{
bone_ske: "https://wxmini-resource.hortorgames.com/images/20180816/20180816220555/crazylll/bone/box_anim_ske.json",
bone_tex: "https://wxmini-resource.hortorgames.com/images/20180816/20180816220555/crazylll/bone/box_anim_tex.json",
bone_tex_img:"https://wxmini-resource.hortorgames.com/images/20180816/20180816220555/crazylll/bone/box_anim_tex.png"
},
{
bone_ske: "https://wxmini-resource.hortorgames.com/images/20180919/20180919164706/box_anim_ske.json",
bone_tex :"https://wxmini-resource.hortorgames.com/images/20180919/20180919164709/box_anim_tex.json",
bone_tex_img:"https://wxmini-resource.hortorgames.com/images/20180919/20180919164704/box_anim_tex.png"
}
]
const BONES_LOACL_RES = [
"DragonBones/0",
"DragonBones/1"
]
@ccclass
export default class Helloworld extends cc.Component {
@property(cc.Node)
crossNode_load: cc.Node = null;
@property(cc.Node)
crossNode_loadres: cc.Node = null;
@property(dragonBones.ArmatureDisplay)
dragonBonesInstance: dragonBones.ArmatureDisplay = null;
prebone_load = null;
prebone_loadRes = null;
start () {
// init logic
// this.onBtnChangeDragonBones_Load();
// this.onBtnChangeDragonBones_LoadRes()
}
onBtnChangeDragonBones_Load(){
let self = this;
let preNode = self.crossNode_load.getChildByName('box_anim');
if(cc.isValid(preNode)){
let armature = preNode.getComponent(dragonBones.ArmatureDisplay);
armature.dragonAsset.destroy();
armature.dragonAtlasAsset.destroy();
cc.loader.release(self.prebone_load);
preNode.destroy();
}
this.TestDragonBones_Load(BONES_HTTP_RES[Math.floor(Math.random()*2)]);
}
onBtnChangeDragonBones_LoadRes(){
let self = this;
let preNode = self.crossNode_loadres.getChildByName('box_anim');
if(cc.isValid(preNode)){
cc.loader.release(self.prebone_loadRes);
preNode.destroy();
}
this.TestDragonBones_LoadRes(BONES_LOACL_RES[Math.floor(Math.random()*2)]);
}
TestDragonBones_Load(bone){
let self = this;
self.prebone_load= [];
self.prebone_load.push(bone.bone_ske);
self.prebone_load.push(bone.bone_tex);
self.prebone_load.push(bone.bone_tex_img);
self.crossNode_load.removeAllChildren(true);
cc.loader.load([bone.bone_ske, bone.bone_tex, bone.bone_tex_img], function(err, results) {
let node = new cc.Node();
let dragonBonesInstance = node.addComponent(dragonBones.ArmatureDisplay);
let _dragonAsset = new dragonBones.DragonBonesAsset();
_dragonAsset.dragonBonesJson = JSON.stringify(results.getContent(bone.bone_ske));
let _dragonAtlasAsset = new dragonBones.DragonBonesAtlasAsset();
_dragonAtlasAsset.atlasJson = JSON.stringify(results.getContent(bone.bone_tex));
_dragonAtlasAsset.texture = results.getContent(bone.bone_tex_img);
dragonBonesInstance.dragonAsset = _dragonAsset;
dragonBonesInstance.dragonAtlasAsset = _dragonAtlasAsset;
dragonBonesInstance.buildArmature('box_anim',node);
dragonBonesInstance.playAnimation('box_anim',0);
self.crossNode_load.addChild(node);
}.bind(this));
}
/**
* dragonBones创建一个骨架组件,将检索所有的 DragonBonesData 实例,当多个 DragonBonesData 实例中包含同名的骨架数据时,可能无法准确的创建出特定的骨架
* 故当你的项目中存在多个同名骨架时,需要给缓存命名不同名字(不建议项目中存在同名骨架)
* 此示例项目中可见,TestDragonBones_Load 和 TestDragonBones_LoadRes 都执行时,有两个骨骼都叫box_anim,同名骨骼数据会相互影响,会导致另一个显示错乱
*/
TestDragonBones_LoadRes(filePath){
let self = this;
self.crossNode_loadres.removeAllChildren(true);
cc.loader.loadResDir(filePath, function(err, results) {
self.prebone_loadRes= [];
let node = new cc.Node();
let dragonBonesInstance = node.addComponent(dragonBones.ArmatureDisplay);
for ( let i = 0; i < results.length; i++ ) {
if (results[i] instanceof dragonBones.DragonBonesAsset) {
dragonBonesInstance.dragonAsset = results[i];
}
if (results[i] instanceof dragonBones.DragonBonesAtlasAsset) {
dragonBonesInstance.dragonAtlasAsset = results[i];
}
self.prebone_loadRes.push(results[i]._uuid);
}
dragonBonesInstance.buildArmature('box_anim',node);
dragonBonesInstance.playAnimation('box_anim',0);
self.crossNode_loadres.addChild(node);
}.bind(this));
}
}
打包资源:
DragonBonesDemo.rar (1.2 MB)