AS3雪碧片
问题描述:
我有一个图像mySprite.png。该图像是一个32x32像素精灵的5x5网格。该图像已加载到项目的库中。AS3雪碧片
假设我在一个类内部有一个render()函数,这个类如何从这个精灵表单资源中将自己绘制为一个精灵?
答
简短的回答是,你会希望使用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)
);
}
您可能会发现这些链接有帮助 - 他们帮助我,当我在学习这一点:
答
另一种可能的方法是将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;
}
这是至关重要有精灵表的容器,而不是精灵表本身的面膜,让你可以移动精灵表独立于面具。
这3个链接不起作用 – 2013-05-12 07:56:57
使用http://web.archive.org/ – 2013-08-13 19:13:03