我有一张图片mySprite.png。该图像是一个5x5网格的32x32像素精灵。该图像已加载到项目库中。
假设我在一个类中有一个render()函数,该类如何从这个精灵表资源中将自己绘制为一个精灵?
答案 0 :(得分: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)
);
}
您可能会发现这些链接很有用 - 他们在我学习这些内容时帮助了我:
答案 1 :(得分: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;
}
将面具放在精灵表的容器上而不是精灵表本身是至关重要的,这样你就可以独立于面具移动精灵表。