0

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

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

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

4

3 回答 3

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 );
}
于 2013-10-01T23:44:53.340 回答
1

尝试SpriteSheetUtils.exractFrame(参见SpriteSheetUtils)。它与您在自定义代码中所做的完全一样。

于 2012-01-19T04:22:04.543 回答
0

好吧,虽然我无法解决 EaselJS 的问题,但我只是解决了它。我创建了一个函数,该getFrame函数复制了 EaselJS 的 sprite 的功能,它是:

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 );
}
于 2012-01-04T20:09:58.103 回答