动画精灵表
根据定义,精灵表是包含特定动画的位图。旧游戏使用网格类型的精灵表,也就是说,每个框架占据相同的区域,并且框架由边缘对齐以形成矩形,可能有一些空间未被占用。稍后,为了最小化位图大小,精灵表开始通过删除包含每个帧的矩形周围的额外空白来打包,但仍然每个帧都是一个矩形以简化复制操作。
为了使精灵表动画化,可以使用两种技术。首先,你可以使用 BitmapData.copyPixels()
将精灵表的某个区域复制到显示的 Bitmap
,从而生成动画角色。如果你使用单个显示的 Bitmap
来托管整个图片,这种方法会更好。
var spriteSheet:BitmapData;
var frames:Vector.<Rectangle>; // regions of spriteSheet that represent frames
function displayFrameAt(frame:int,buffer:BitmapData,position:Point):void {
buffer.copyPixels(spriteSheet,frames[frame],position,null,null,true);
}
如果你在显示列表上有很多 Sprite
s 或 Bitmap
s,它们可以使用第二种技术,它们共享相同的精灵表。这里,目标缓冲区不再是单个对象,但每个对象都有自己的缓冲区,因此正确的策略是操作位图的 bitmapData
属性。然而,在这之前,应该将精灵表切割成单独的帧。
public class Stuff extends Bitmap {
static var spriteSheet:Vector.<BitmapData>;
function displayFrame(frame:int) {
this.bitmapData=spriteSheet[frame];
}
// ...
}