在第一帧上创建 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".
用这个把我的头发拉出来,希望这不是什么傻事。下面是程序中的一段代码。当 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".