首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EaselJS和SpriteSheet

EaselJS和SpriteSheet
EN

Stack Overflow用户
提问于 2012-01-04 22:19:06
回答 3查看 1.3K关注 0票数 0

我只是想在一个精灵工作表中得到每一帧,但我一直得到的是第一帧,下面是代码:

代码语言:javascript
复制
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();
}

我会把这个放在小提琴上,但是图像会有跨域的问题。

EN

回答 3

Stack Overflow用户

发布于 2012-01-19 12:22:05

尝试SpriteSheetUtils.exractFrame (请参阅SpriteSheetUtils)。它的功能与您在自定义代码中所做的完全相同。

票数 1
EN

Stack Overflow用户

发布于 2013-10-02 07:44:53

代码中的问题是,frame.image属性指向源位图,这对于子结构表中的所有帧都是相同的(除非您有多图像子结构表)。

若要显示精灵工作表中的帧,请使用精灵。例如,修改您的代码:

代码语言:javascript
复制
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 );
}
票数 1
EN

Stack Overflow用户

发布于 2012-01-05 04:09:58

嗯,虽然我不能用EaselJS解决这个问题,但我只是解决了它。我创建了一个复制getFrame函数的函数,这是EaselJS的sprite内容要做的事情,如下所示:

代码语言:javascript
复制
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 );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8728341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档