From 0843d96442ca3bf37f22e81cc44df753a8ebf761 Mon Sep 17 00:00:00 2001 From: fanxuehan <fanxuehan@qq.com> Date: Wed, 9 Mar 2022 16:27:50 +0800 Subject: [PATCH] feat: asyncLoadDragonBoneAnime --- .DS_Store | Bin 10244 -> 10244 bytes assets/cocos_generator/script/util.ts | 67 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/.DS_Store b/.DS_Store index c257b29e612f4d945559633ec58aac425bb66366..29750aff4fa9bef62a6da7247c09d823af66f858 100644 GIT binary patch delta 37 tcmZn(XbG6$&&ahgU^hP_*Jd7ppKO~&BtElmY~W|y%&zc{ZL)~Oe*p0*4DA2_ delta 180 zcmZn(XbG6$&&azmU^hP_?`9r>pKP2g3<V5142cYtlX(SYCmRdoOGs8%8yOhuC>R@= z)aocy8ycIK=qQ+&n@!#*Xf6X)oKl>ela!yI!vF+u6E=SnW8&D%uJDgkQ>F2k3IKVX BEhYc} diff --git a/assets/cocos_generator/script/util.ts b/assets/cocos_generator/script/util.ts index d53ba2c..542abac 100644 --- a/assets/cocos_generator/script/util.ts +++ b/assets/cocos_generator/script/util.ts @@ -189,6 +189,73 @@ export async function asyncDelay(time) { }) } +export async function asyncLoadDragonBoneAnime(node, { skeJsonData: { url: skeJsonDataUrl }, texJsonData: { url: texJsonDataUrl }, texPngData: { url: texPngDataUrl } }) { + + if (!texPngDataUrl || !texJsonDataUrl || !texPngDataUrl + || texPngDataUrl == '' || texJsonDataUrl == '' || texPngDataUrl == '') { + return; + } + + return new Promise((resolve, reject) => { + if (node.animaNode) { + node.animaNode.removeFromParent(); + } + const animaNode = new cc.Node(); + animaNode.name = 'animaNode'; + animaNode.parent = node; + animaNode.active = true; + node.animaNode = animaNode; + + const dragonDisplay = animaNode.addComponent(dragonBones.ArmatureDisplay); + + const loadTexture = new Promise((resolve, reject) => { + cc.assetManager.loadRemote(texPngDataUrl, (error, texture) => { + if (error) { + reject(error); + } + resolve(texture); + }); + }); + + const loadTexJsonData = new Promise((resolve, reject) => { + cc.assetManager.loadAny({ url: texJsonDataUrl }, (error, atlasJson) => { + if (error) { + reject(error); + } + resolve(atlasJson); + }); + }); + + const loadSkeJsonData = new Promise((resolve, reject) => { + cc.assetManager.loadAny({ url: skeJsonDataUrl }, (error, dragonBonesJson) => { + if (error) { + reject(error); + } + resolve(dragonBonesJson); + }); + }); + + Promise.all([loadTexture, loadTexJsonData, loadSkeJsonData]).then(([texture, atlasJson, dragonBonesJson]) => { + const atlas = new dragonBones.DragonBonesAtlasAsset(); + atlas.atlasJson = JSON.stringify(atlasJson); + atlas.texture = texture; + + const asset = new dragonBones.DragonBonesAsset(); + asset.dragonBonesJson = JSON.stringify(dragonBonesJson); + + dragonDisplay.dragonAtlasAsset = atlas; + dragonDisplay.dragonAsset = asset; + + let armatureNames = dragonBonesJson.armature.map(data => data.name); + + if (armatureNames.length > 0) { + dragonDisplay.armatureName = armatureNames[0]; + } + resolve(animaNode); + }); + }); +} + export class FireworkSettings { baseNode; // 父节点 nodeList; // ç«èŠ±èŠ‚ç‚¹çš„array -- 2.21.0