2009-07-28 2 views
3

이미지가 있습니다. mySprite.png. 이미지는 32x32 픽셀 스프라이트의 5x5 격자입니다. 이 이미지는 프로젝트의 라이브러리에로드되었습니다.AS3 스프라이트 시트

클래스 내에 render() 함수가 있다고 가정하면이 클래스는이 스프라이트 시트 리소스에서 단일 스프라이트로 어떻게 그려 집니까?

답변

10

간단한 대답은 BitmapData.copyPixels()을 사용하여 원본 스프라이트 시트의 작은 섹션 만 화면에 실제로 표시되는 스프라이트로 복사하는 것입니다.

뭔가 같은 :

private function DrawSpriteIndex(displayBitmap:Bitmap, spriteSheet:Bitmap, spriteIndex:int):void { 
    var spriteW:int = 32; 
    var spriteH:int = 32; 
    var sheetW:int = 5; 

    displayBitmap.bitmapData.copyPixels(spriteSheet.bitmapData, 
             new Rectangle((spriteIndex % sheetW) * spriteW, Math.floor(spriteIndex/sheetW) * spriteH, 32, 32), 
             new Point(0,0) 
            ); 
} 

당신은 도움이 링크를 찾을 수 있습니다 - 그들이 나를 도와 나는이 학습 할 때 :

+0

3 개의 링크가 작동하지 않습니다. –

+0

사용 http://web.archive.org/ –

1

또 다른 가능한 방법은 32x32 마스크를 시트 위에 놓고 시트를 움직이는 것입니다.

이 (의사 코드) 같은 것을 작동합니다 :

var spriteMask:Sprite = new Sprite(); 
spriteMask.graphics.drawRect(0,0,32,32); 
spriteSheetContainer.mask = spriteMask; 

function render():void { // this function is on the container of the sprite sheet (spriteSheetContainer in this example) 
    // run offsetX & Y iteration logic. I would assume something that uses a frame counter, modulus, and the sprite layout grid dimensions 
    _spriteSheet.x = offsetX; // move the sprite around under the mask 
    _spriteSheet.y = offsetY; 
} 

그것은 당신이 스프라이트 시트를 이동할 수 있도록하는 스프라이트 시트의 용기가 아닌 스프라이트 시트 자체에 마스크를 가지고 결정적 마스크와 독립적입니다.

+2

플래시 플레이어는 여전히 전체 이미지를 그리기 때문에이 작업을 수행하는 데있어 상당한 성능 저하가 있습니다. 그것을보십시오. –