在第一帧上创建 js 精灵冻结

Create js sprite freezing on first frame

用这个把我的头发拉出来,希望这不是什么傻事。下面是程序中的一段代码。当 leftwalker.x == 150 他应该 gotoAndPlay 静止动画但它只播放第一帧时,之前的动画运行正常。有任何想法吗?

var data = 
         {
         images: ["images/ste_basic_wand.png"],
         frames: {width:64, height:64},
         animations: 
            {
                // start, end, next, speed
                walkright: [143,151,"walkright",1.18],
                walkleft: [118,125,"walkleft",1.18],
                stand:[39,45,"stand",0.08],
                standstill:[26,27, "standstill", 1.2]
            }

         };
         var spriteSheet = new createjs.SpriteSheet(data);

         leftwalker = new createjs.Sprite(spriteSheet);
         leftwalker.name = "lefty";
         leftwalker.framerate = 30;
         leftwalker.x = 100;
         leftwalker.y = 100;
         leftwalker.currentFrame = 0;
         leftwalker.scaleY = leftwalker.scaleX = 2;

         leftwalker.gotoAndPlay("walkright");

         stage.addChild(leftwalker);
         createjs.Ticker.setFPS(10);    
         createjs.Ticker.addEventListener("tick", tick);    
    }

    function tick(event) {
        if(container.x < 150)
        {   
        container.x += 5;
        }
        if(leftwalker.x < 150)
        {
            leftwalker.x += 2;
        }
        if(leftwalker.x == 150)
        {
            leftwalker.gotoAndPlay("standstill");
        }
        //  if (circle.x > stage.canvas.width) { circle.x = 0; }
        stage.update(event); // important!!
    }

找到了解决方法,但仍然不确定原因,但 easaljs 不喜欢该代码

if(leftwalker.x == 150)
        {
            leftwalker.gotoAndPlay("standstill");
        }

当我更改它以使角色不停留在点 150(将他移动到 151)时,动画开始。我还放慢了静止不动的动画速度,使它看起来更真实,但这与我没有 post 这段代码的修复无关。

if(leftwalker.x == 150)
        {
            leftwalker.gotoAndPlay("standstill");
            if(leftwalker.x < 180)
            {
                leftwalker.x += 1;
            }
        }

发生这种情况的原因是您在滴答期间调用 gotoAndPlay("standstill")。一旦达到 150,您的精灵就会停止移动,因此它永远处于 x=150。这意味着每个刻度都会告诉它 gotoAndPlay 同一帧,导致它成为 "stuck".