Cocos Creator js动画精灵

时间:2018-04-06 15:41:19

标签: animation sprite cocos2d-x cocoscreator

我使用精灵表和更新功能为精灵设置了动画, 像这样:

注意:我已将plist拖动到Ccos Creator用户界面中sprite节点(与monster.js脚本相连的节点)的atlas字段中。

//monster.js
onLoad: function(){
// change monsters face
            this.faces['1'] =  'monster1';
            this.faces['2'] =  'monster2';
            this.faces['3'] =  'Rmonster1';
            this.faces['4'] =  'Rmonster2';

}
    update: function (dt) {


    this.timekeep += dt;

    if(this.timekeep > 0.1){

var self = this;
          cc.loader.loadRes('monsters', cc.SpriteAtlas, function (err, atlas) {
  self.getComponent(cc.Sprite).spriteFrame = atlas.getSpriteFrame(self.faces[self.monstersN]);
});     

                this.timekeep = 0;

                this.monstersN++;
                if(this.monstersN > 4){

                    this.monstersN = 1;

                }
            }

它实际上工作正常。我已经认为我应该将cc.loader.loaderRes导出到onLoad函数中,并将atlas保存为全局var,而不是每次调用更新时都加载。

然而......看到内置动画功能,这可能不是正确的解决方案。所以我尝试了这个:

onLoad: function () {
            // change monster face
            this.faces['1'] =  'monster1';
            this.faces['2'] =  'monster2';
            this.faces['3'] =  'Rmonster1';
            this.faces['4'] =  'Rmonster2';
            var self = this;
                  cc.loader.loadRes('monsters', cc.SpriteAtlas, function (err, atlas) {
var sprite = self.getComponent(cc.Sprite);

        var animFrames = [];
 for (var i = 1; i < 4; i++) {   
     var spriteFrame = atlas.getSpriteFrame(self.faces[i]);
        var animFrame = new cc.AnimationFrame();
            animFrame.initWithSpriteFrame(spriteFrame, 1, null);
        animFrames.push(animFrame);
 }      
 var animation = sprite.Animation.create(animFrames, 0.2, 100);
    var animate   = sprite.Animate.create(animation); 

    sprite.runAction(animate); 
              });    


        },

我收到此错误:

  

cc.AnimationFrame不是构造函数

然后我尝试了这个:

onLoad: function () {

            // change monster face
            this.faces['1'] =  'monster1';
            this.faces['2'] =  'monster2';
            this.faces['3'] =  'Rmonster1';
            this.faces['4'] =  'Rmonster2';
            var self = this;
                  cc.loader.loadRes('monsters', cc.SpriteAtlas, function (err, atlas) {
self.atlasA = atlas;
              });    

 var sprite = this.getComponent(cc.Sprite);

        var animFrames = [];
 for (var i = 1; i < 4; i++) {   
     var spriteFrame = this.atlasA.getSpriteFrame(this.faces[i]);
    var animFrame = new cc.AnimationFrame();
        animFrame.initWithSpriteFrame(spriteFrame, 1, null);
    animFrames.push(animFrame);
 }      
 var animation = sprite.Animation.create(animFrames, 0.2, 100);
var animate   = sprite.Animate.create(animation); 

sprite.runAction(animate); 

        },

我收到此错误:

  

无法读取未定义

的属性'getSpriteFrame'

如何使用cc.animate使用我的spritesheet更改精灵。我想要实现的是按照图片在plist中的顺序移动plist,重复直到将怪物放回到来自它的池中。

1 个答案:

答案 0 :(得分:0)

对于任何可能仍在寻找的人来说,这是一个解决方案.....

cc.AnimationClip.createWithSpriteFrames([sf1, sf2, ...], fps)