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】:

如果您在滴答声(或类似)中调用gotoAndStopgotoAndPlay,那么它将不断重置到第一帧。您必须确保仅在动画更改时调用这些函数一次。

设置它的一个好方法是存储当前动画,存储它,并且只有在动画改变时才改变它。比如:

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 一起使用

easelJS入门事件spritesheet

在 EaselJS 中为 spritesheet 设置动画时遇到问题

EaselJS MultiRow Spritesheet

EaselJS spritesheet 动画使背景消失