【发布时间】:2014-06-14 20:25:19
【问题描述】:
我正在使用 EaselJS 开发基于 Fez 的 HTML5 Canvas 游戏,但我发现了一个我自己无法解决的问题,同时尝试将 SpriteSheets 实现到英雄。
问题是我为我的英雄定义了三个动画("stand"、"jump" 和 "run"),当我尝试使用 hero.gotoAndPlay("run") 或 hero.gotoAndStop("stand") 从一个动画更改为另一个动画时不要更改,更改但仅显示第一帧或更改为错误的动画。
有人可以帮助我吗?我做错了什么,我该如何解决?谢谢。
这是我用来创建英雄 Sprite 的相关 JavaScript 代码:
var data = {
images: ["http://i.imgur.com/M0GmFnz.png"],
frames: {width:34, height:46},
animations: {
stand:0,
run:[0,12,true,0.25],
jump:13
}
};
var spriteSheet = new createjs.SpriteSheet(data);
var hero = new createjs.Sprite(spriteSheet, "stand");
hero.offset = 4 + 1; // "+1" is important, change the first number only.
hero.regX = hero.offset + 2;
hero.regY = hero.offset;
hero.width = 34 - (hero.offset*2) - 12;
hero.height = 46 - (hero.offset*2);
hero.x = 0;
hero.y = 0;
hero.jumping = true;
stage.addChild(hero);
以及我用来更改动画的代码:
if(!left && !right){ // User isn't pressing left arrow or right arrow
hero.gotoAndStop("stand");
}else{
hero.gotoAndPlay("run");
}
【问题讨论】:
-
您是否经常调用 gotoAndStop,比如在滴答声之类的?这将不断地将精灵设置为动画的第一帧。
-
是的,我在一个刻度内调用该函数。有办法获取实例中正在播放的实际动画吗?
-
我尝试过使用
function changeAnimation(obj1, frameOrAnimation){ if(obj1.animation != frameOrAnimation){obj1.animation = frameOrAnimation; obj1.gotoAndPlay(frameOrAnimation);}}然后if(!left && !right){ changeAnimation(hero, "stand");}else{changeAnimation(hero, "run");}并且它有效,但是当我尝试使用跳跃动画时,如果只是不改变。这是更新后的 JSFiddle:jsfiddle.net/TiagoMarinho/QW2Qn/1 -
我也尝试过使用 gotoAndStop 而不是 gotoAndPlay。什么都没有发生。
标签: javascript html canvas easeljs sprite-sheet