Cocos Creator js 动画精灵
Cocos Creator js animate sprite
我使用 sprite sheet 和更新功能为 sprite 制作了动画,
像这样:
注意:我已将 plist 拖到 Ccos Creator UI.
精灵节点(monster.js 脚本附加到的同一节点)的图集字段中
//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 函数并将图集保存为全局变量,而不是每次调用更新时都加载。
但是...看到有内置的动画功能,这不是正确的解决方案。所以我尝试了这个:
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 is not a constructor
然后我尝试了这个:
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);
},
我收到这个错误:
Cannot read property ‘getSpriteFrame’ of undefined
如何使用 cc.animate 来使用我拥有的 spritesheet 更改 sprite。我想要实现的是按照图像在 plist 中的顺序在 plist 中移动,重复直到怪物被放回它来自的池中。
这是为可能仍在寻找的任何人提供的解决方案......
cc.AnimationClip.createWithSpriteFrames([sf1, sf2, ...], fps)
我使用 sprite sheet 和更新功能为 sprite 制作了动画, 像这样:
注意:我已将 plist 拖到 Ccos Creator UI.
精灵节点(monster.js 脚本附加到的同一节点)的图集字段中//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 函数并将图集保存为全局变量,而不是每次调用更新时都加载。
但是...看到有内置的动画功能,这不是正确的解决方案。所以我尝试了这个:
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 is not a constructor
然后我尝试了这个:
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);
},
我收到这个错误:
Cannot read property ‘getSpriteFrame’ of undefined
如何使用 cc.animate 来使用我拥有的 spritesheet 更改 sprite。我想要实现的是按照图像在 plist 中的顺序在 plist 中移动,重复直到怪物被放回它来自的池中。
这是为可能仍在寻找的任何人提供的解决方案......
cc.AnimationClip.createWithSpriteFrames([sf1, sf2, ...], fps)