AS3 - 刷新位图的最有效方法

时间:2012-06-28 09:52:58

标签: actionscript-3 flash bitmap bitmapdata

我在一个类中有这个函数,它创建了我传入的任何DisplayObject的位图。 正如您将看到的,每次创建新位图时,我都会创建一个新的BitmapData对象和一个新的Bitmap对象。

有没有办法调整这个函数,所以每次运行函数时我都不再需要重新创建这两个对象?

private var bitmapData:BitmapData;
private var bm:Bitmap; 

crop(someSprite.width, someSprite.height, someSprite);

private function crop(_width:Number, _height:Number, displayObject:DisplayObject):void {

bitmapData.dispose();
bitmapData = new BitmapData( _width, _height, false, 0xFFFFFFFF );  
bitmapData.draw(displayObject);

bm = null;
bm = new Bitmap(bitmapData, PixelSnapping.ALWAYS, true);
bm.smoothing = true;
bm.alpha = 0;

}

谢谢,

标记

2 个答案:

答案 0 :(得分:2)

如果显示对象尺寸每次都改变,则每次都必须重新创建BitmapData

对于Bitmap对象,您无需重新创建它。您可以直接设置位图数据:

bm.bitmapData = bitmapData;

答案 1 :(得分:2)

如果你想避免每次创建一个新的BitmapData,你只需要创建一个你期望的最大尺寸的BitmapData,你首先使用你的Map.fillRect(yourMap.rect,0)清除那个地图,然后再做使用具有裁剪尺寸的剪辑矩形在右上角绘制。为了获得额外的微小性能提升,您可以设置Bitmap对象的ScrollRect属性,将其显示为裁剪尺寸。