动画精灵表

根据定义,精灵表是包含特定动画的位图。旧游戏使用网格类型的精灵表,也就是说,每个框架占据相同的区域,并且框架由边缘对齐以形成矩形,可能有一些空间未被占用。稍后,为了最小化位图大小,精灵表开始通过删除包含每个帧的矩形周围的额外空白来打包,但仍然每个帧都是一个矩形以简化复制操作。

为了使精灵表动画化,可以使用两种技术。首先,你可以使用 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);
}

如果你在显示列表上有很多 Sprites 或 Bitmaps,它们可以使用第二种技术,它们共享相同的精灵表。这里,目标缓冲区不再是单个对象,但每个对象都有自己的缓冲区,因此正确的策略是操作位图的 bitmapData 属性。然而,在这之前,应该将精灵表切割成单独的帧。

public class Stuff extends Bitmap {
    static var spriteSheet:Vector.<BitmapData>;
    function displayFrame(frame:int) {
        this.bitmapData=spriteSheet[frame]; 
    }
    // ...
}