2009-07-28 8 views
3

J'ai une image mySprite.png. L'image est une grille 5 x 5 de sprites 32x32 px. Cette image a été chargée dans la bibliothèque du projet.AS3 Sprite Sheets

En supposant que j'ai une fonction render() dans une classe, comment cette classe se dessine-t-elle comme une seule image-objet à partir de cette ressource de feuille de sprite?

Répondre

10

La réponse courte est que vous voudrez utiliser BitmapData.copyPixels() pour copier seulement une petite section de votre feuille de sprite source à votre sprite d'affichage qui est réellement sur l'écran.

Quelque chose comme:

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

Vous pouvez trouver ces liens utiles - ils me ont aidé quand j'appris ceci:

+0

Les 3 liens ne fonctionnent pas –

+0

Utilisez http://web.archive.org/ –

1

Une autre méthode possible serait de mettre un masque 32x32 sur la feuille et de simplement déplacer la feuille.

Il travaillerait quelque chose comme (pseudo-code):

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

Il est essentiel d'avoir le masque sur un conteneur de la feuille de sprites et non la feuille de sprite lui-même, de sorte que vous pouvez déplacer la feuille de sprite indépendant du masque.

+2

Il y a quelques ramifications de performances assez importantes de faire cela, car le lecteur Flash dessine toujours l'image entière, même si vous ne le faites pas le voir. –