我只是想在精灵表中获取每个帧,但我一直得到的是第一帧,这是代码:
function handleImageLoaded(e)
{
var c = new Container();
var d = { };
var l = rx * ry;
var lh = canvas.height / ry;
var lw = canvas.width / rx;
var lx = 0;
var ly = 0;
var s;
var t;
d.images = [ e.target ];
d.frames = { width: lw, height: lh, count: l };
s = new SpriteSheet( d );
for ( var i = 0; i < l; i++ )
{
t = new Bitmap( s.getFrame( i ).image );
t.x = lx++ * lw;
t.y = ( lx == rx ? ly++ : ly ) * lh;
lx = lx == rx ? 0 : lx;
c.addChild( t );
}
stage.addChild( c );
stage.update();
}
我会把它放在一个小提琴上但是图像会出现跨域问题。
答案 0 :(得分:1)
尝试SpriteSheetUtils.exractFrame
(请参阅SpriteSheetUtils)。它完全按照您在自定义代码中执行的操作。
答案 1 :(得分:1)
代码中的问题是frame.image属性指向源位图,对于spritesheet中的所有帧都是相同的(除非你有一个多图像spritesheet)。
要从spritesheet显示帧,请使用Sprite。例如,修改代码:
for ( var i = 0; i < l; i++ )
{
t = new Sprite(spriteSheet, i);
t.x = lx++ * lw;
t.y = ( lx == rx ? ly++ : ly ) * lh;
lx = lx == rx ? 0 : lx;
c.addChild( t );
}
答案 2 :(得分:0)
好吧,虽然我无法解决EaselJS的问题,但我只是解决了这个问题。我创建了一个函数来复制EaselJS的sprite内容所要做的getFrame
函数,这里是:
function generateTile(p, i)
{
var cs = document.createElement( 'canvas' );
var c = cs.getContext( '2d' );
cs.height = p[ 3 ];
cs.width = p[ 2 ];
c.drawImage( i, p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ], 0, 0, p[ 2 ], p[ 3 ] );
return new Bitmap( cs );
}