2012-01-04 3 views
0

단순히 스프라이트 시트의 각 프레임을 얻으려고하지만 난 점점 계속 모두가 첫 번째 프레임이다, 여기에 코드입니다 :EaselJS 및 SpriteSheet

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

글쎄, 내가 이젤 주스로 문제를 해결할 수없는 동안, 나는 그 문제를 해결했다. 내가 EaselJS의 스프라이트 물건이 할 의미 된 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); 
} 
1

SpriteSheetUtils.exractFrame을 (SpriteSheetUtils 참조)보십시오. 사용자 정의 코드에서 수행하는 작업을 정확하게 수행합니다.

1

코드의 문제점은 frame.image 속성이 다중 비트 이미지 스프라이트 시트가없는 한 스프라이트 시트의 모든 프레임에 대해 동일한 소스 비트 맵을 가리킨다는 것입니다.

스프라이트 시트에서 프레임을 표시하려면 스프라이트를 사용하십시오. 예를 들어 코드 수정 :

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