EaselJS SpriteSheet 没有响应 gotoAndPlay
Posted
技术标签:
【中文标题】EaselJS SpriteSheet 没有响应 gotoAndPlay【英文标题】:EaselJS SpriteSheet isn't responding to gotoAndPlay 【发布时间】: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");
JSFiddle
Official Site
【问题讨论】:
您是否经常调用 gotoAndStop,比如在滴答声之类的?这将不断地将精灵设置为动画的第一帧。 是的,我在一个刻度内调用该函数。有办法获取实例中正在播放的实际动画吗? 我尝试过使用function changeAnimation(obj1, frameOrAnimation) if(obj1.animation != frameOrAnimation)obj1.animation = frameOrAnimation; obj1.gotoAndPlay(frameOrAnimation);
然后if(!left && !right) changeAnimation(hero, "stand");elsechangeAnimation(hero, "run");
并且它有效,但是当我尝试使用跳跃动画时,如果只是不改变。这是更新后的 JSFiddle:jsfiddle.net/TiagoMarinho/QW2Qn/1
我也尝试过使用 gotoAndStop 而不是 gotoAndPlay。什么都没有发生。
【参考方案1】:
如果您在滴答声(或类似)中调用gotoAndStop
或gotoAndPlay
,那么它将不断重置到第一帧。您必须确保仅在动画更改时调用这些函数一次。
设置它的一个好方法是存储当前动画,存储它,并且只有在动画改变时才改变它。比如:
var animation;
if(!left && !right) // User isn't pressing left arrow or right arrow
animation = "stand";
else
animation = "run";
if (currentAnimation != animation)
hero.gotoAndStop(animation);
这只是一个例子,但应该给你一个想法。您应该只调用一次这些方法来启动动画。
【讨论】:
是的,这就是我尝试过的,但是当我对“跳跃”动画做同样的事情时,它根本不起作用,就像没有定义“跳跃”动画一样。 糟糕! 问题已解决。我忘了添加if(hero.jumping == false)changeAnimation("stand");
,所以动画每帧变化两次,从“站立”到“跳跃”再到“站立”。感谢您在股票代码中提供有关 gotoAndPlay 的信息。 :)以上是关于EaselJS SpriteSheet 没有响应 gotoAndPlay的主要内容,如果未能解决你的问题,请参考以下文章
Spritesheet 动画 easeljs-0.7.1.min.js
easelJS - 使用 Javascript 调整图像大小,然后将其与 SpriteSheet 一起使用