cocos creator动态加载DragonBones

这里写图片描述
根据creator的龙骨组件来看的话添加一个龙骨的话需要设置五个地方,分别是DragonAsset(龙骨的配置json文件),DragonAtlas(龙骨的纹理json资源),Armature(Armature名称),Animation(Animation名称),playTimes(动画的循环次数)。
如果只是播放一个单一的龙骨的话直接把资源拖到相应的位置,设置一下动画然后就ok了,但是需要切换不同的龙骨的资源的时候要咋办?按照我的经验来说的话有如下三点可以解决:

  1. 制作成预制资源,在需要的时候加载不同的预制体。
  2. 事先把每个需要用到的龙骨附加到不同的节点,然后根据需要哪个龙骨进行显示跟隐藏。
  3. 动态加载龙骨,利用一个DragonBones组件,当需要不同的龙骨资源的时候动态加载龙骨资源并附到组件上面。

分析上面三点的话,肯定是3最省事省心,1跟2的话没有什么难点,无非就是控制好加载哪个预制体,控制哪个节点的显示。接下来就说说如何实现动态加载龙骨。

动态加载龙骨的思路:利用loader加载需要用到的龙骨资源,然后把需要用到的资源赋值给龙骨组件,设置好各项的参数。
代码如下

    /**
     * 动态加载龙骨
     * @param animationDisplay  龙骨组件
     * @param path              龙骨地址
     * @param armatureName      Armature名称
     * @param newAnimation      Animation名称
     * @param completeCallback  动画播放完毕的回调
     * @param playTimes         播放次数 -1是根据龙骨文件 0五险循环 >0是播放次数
     */
    loadDragonBones(animationDisplay, path, armatureName, newAnimation, completeCallback, playTimes = 1) {  //动态加载龙骨
        cc.loader.loadResDir(path, function(err, assets){

            if(err || assets.length <= 0)  return;

            assets.forEach(asset => {
                if(asset instanceof dragonBones.DragonBonesAsset){
                    animationDisplay.dragonAsset = asset;
                }
                if(asset instanceof dragonBones.DragonBonesAtlasAsset){
                    animationDisplay.dragonAtlasAsset  = asset;
                }
            });

            animationDisplay.armatureName = armatureName;
            animationDisplay.playAnimation(newAnimation, playTimes);
            animationDisplay.addEventListener(dragonBones.EventObject.COMPLETE, completeCallback);
        })
    }

在实现的过程中遇到的几个坑记录一下,一个是armatureName跟Animation一定要一起设置,设置一个的话是不起作用的。用animationDisplay.playTimes = 1的方式设置播放次数也是不起作用,必须要在playAnimation方法里面设置才生效。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cocos Creator 是一款基于 JavaScript 的游戏开发工具,支持动态加载资源。动态加载资源是指在游戏运行时,根据需要动态加载游戏所需的资源,例如图片、声音、动画等。 动态加载资源的优点在于可以减少游戏的启动时间和内存占用,同时也可以提高游戏的灵活性和可维护性。下面介绍一下 Cocos Creator 中如何进行动态加载资源。 1. 加载图片资源 使用 cc.loader.loadRes() 方法可以加载项目中的资源,例如图片资源。示例代码如下: ``` cc.loader.loadRes("image/test", cc.SpriteFrame, function (err, spriteFrame) { if (err) { cc.error(err.message || err); return; } var node = new cc.Node("New Sprite"); var sprite = node.addComponent(cc.Sprite); sprite.spriteFrame = spriteFrame; node.parent = cc.director.getScene(); }); ``` 该代码会加载项目中的 "image/test" 路径下的图片资源,并创建一个新的 Sprite 对象,将图片资源赋值给 Sprite 的 spriteFrame 属性,最后将 Sprite 对象添加到场景中。 2. 加载声音资源 使用 cc.loader.loadRes() 方法也可以加载声音资源。示例代码如下: ``` cc.loader.loadRes("audio/test", cc.AudioClip, function (err, audioClip) { if (err) { cc.error(err.message || err); return; } cc.audioEngine.play(audioClip, false, 1); }); ``` 该代码会加载项目中的 "audio/test" 路径下的声音资源,并播放该声音。 3. 加载动画资源 使用 cc.loader.loadRes() 方法也可以加载动画资源。示例代码如下: ``` cc.loader.loadRes("animation/test", cc.AnimationClip, function (err, animationClip) { if (err) { cc.error(err.message || err); return; } var node = new cc.Node("New Animation"); var animation = node.addComponent(cc.Animation); animation.addClip(animationClip); animation.play("test"); node.parent = cc.director.getScene(); }); ``` 该代码会加载项目中的 "animation/test" 路径下的动画资源,并创建一个新的 Animation 对象,将动画资源添加到 Animation 中,最后播放名为 "test" 的动画。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值