2009-07-28 120 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个链接不起作用 – 2013-05-12 07:56:57

+0

使用http://web.archive.org/ – 2013-08-13 19:13:03

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

这是至关重要有精灵表的容器,而不是精灵表本身的面膜,让你可以移动精灵表独立于面具。