EaselJS和SpriteSheet

时间:2012-01-04 14:19:06

标签: sprite-sheet easeljs

我只是想在精灵表中获取每个帧,但我一直得到的是第一帧,这是代码:

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();
}

我会把它放在一个小提琴上但是图像会出现跨域问题。

3 个答案:

答案 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 );
}