我正在使用EaselJS SpriteSheets,我想知道如何让我的英雄停止顺利运行,所以如果SpriteSheet正在播放“运行”动画并且它在第5帧,我将需要动画帧6,7,8,8,8,7,6,5然后停在0以使我的英雄站立不动。 我该怎么做?
这是我的SpriteSheet:
请注意,帧不是连续的:它们从0到4,4到0再到5到8.帧9未使用。
这是我的SpriteSheet代码:
user.hero.bmp = new createjs.Bitmap("Graphics/Fox.png");
user.hero.bmp.cache(0, 0, user.hero.bmp.image.width, user.hero.bmp.image.height);
var data = new createjs.SpriteSheet({
images: [user.hero.bmp.cacheCanvas],
frames: {
width: 30,
height: 40
},
animations: {
stand: 0,
run: {
frames: [0,1,2,3,4,4,4,3,2,1,0,5,6,7,8,8,8,7,6,5],
next: true,
speed: .75
}
}
});
user.hero = new createjs.Sprite(data, "stand");
// Removed lots of non-relevant things here
movableObjContainer.addChild(user.hero);
movableObj.push(user.hero);
以下是我用来在动画之间切换的功能:
function changeAnimation(obj, frameOrAnimation) {
if (obj.animation != frameOrAnimation) {
obj.animation = frameOrAnimation;
obj.gotoAndPlay(frameOrAnimation);
}
}
功能用途:changeAnimation(user.hero, "stand");
这里是最重要的部分,在自动收报机内运行的动画逻辑:
if ((user.input.left || user.input.right) && !user.hero.jumping) {
changeAnimation(user.hero, "run");
} else if (!user.hero.jumping && user.hero.animation != "stopFalling" && user.hero.animation != "almostFalling") {
changeAnimation(user.hero, "stand");
}
答案 0 :(得分:1)
在重新制定我的问题时,我更好地理解了我的问题并解决了它。 谢谢你,StackOverflow。
所以,我想我需要得到实际的帧数,然后每次滴答加1 /减去它直到它到达0帧。不幸的是,这种方法过于复杂,显然会损害可维护性。
我通过检查currentFrame
属性是否等于零来解决我的问题。如果不是,则动画继续进行,否则动画停止。
以下是生成的代码:
if ((user.input.left || user.input.right) && !user.hero.jumping) {
changeAnimation(user.hero, "run");
} else if (!user.hero.jumping && user.hero.animation != "stopFalling" && user.hero.animation != "almostFalling") {
if (!(user.hero.animation == "run" && user.hero.currentFrame != 0)) {
changeAnimation(user.hero, "stand");
}
}