【发布时间】:2018-04-06 15:41:18
【问题描述】:
我使用精灵表和更新功能为精灵设置了动画, 像这样:
注意:我已将 plist 拖到 Ccos Creator UI 中 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 函数中,并将图集保存为全局 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 更改 sprite。我想要实现的只是按照图像在 plist 中的顺序在 plist 中移动,重复直到怪物被放回它来自的池中。
【问题讨论】:
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
SO 不再是获取答案的地方。 :-(
-
我不推荐旨在强迫人们帮助你的消极攻击性言论。对我的样板评论的理想回应是“对不起,你是对的:我不会再添加它了”。如果你能记住,除了少数技术倡导者之外,这里的大多数读者都是志愿者,那对你很有帮助。人们喜欢在这里提供帮助,但没有人有义务这样做。
-
我知道在这里浪费我的时间,但我不知道你在说什么。 Aparently 我在我的帖子里放了紧急。我看不到我把它放在哪里了。无论如何,我找到了一些更好的地方来获得一些帮助,所以用这个做你想做的事。我会让你自己享受它:-) 只是澄清一下,根本没有侵略性。只是失望,因为我曾经喜欢这个地方。
-
见edit history here。不要把这里的标准和指南当成个人,大卫——他们在那里是有原因的。当然,如果您对网站如何更好地运营有任何建议,您可以随时 post on Meta - 只是愿意期待已建立用户的冷遇。
标签: animation sprite cocos2d-x cocoscreator