【问题标题】:AS3 - Most efficient method of refreshing a bitmapAS3 - 刷新位图的最有效方法
【发布时间】:2012-06-29 19:46:39
【问题描述】:

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

有没有办法调整这个函数,这样我就不必在每次运行函数时重新创建这两个对象了?

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;

}

谢谢,

标记

【问题讨论】:

    标签: actionscript-3 flash bitmap bitmapdata


    【解决方案1】:

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

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

    bm.bitmapData = bitmapData;
    

    【讨论】:

      【解决方案2】:

      如果您想避免每次只在您期望的最大尺寸中创建一个 BitmapData 时都创建一个新的 BitmapData,并且在您的裁剪方法中,您首先使用 yourMap.fillRect(yourMap.rect,0) 清除该地图,然后执行使用带有裁剪尺寸的剪辑矩形在右上角绘制。为了获得额外的微小性能提升,您可以将 Bitmap 对象的 ScrollRect 属性设置为裁剪后的尺寸。

      【讨论】:

      • 感谢您的信息。我有点迷路了。什么是 yourMap 对象,它如何应用于上面的示例?
      • yourMap 将是您创建一次然后一直重复使用的最大预期尺寸的一个位图数据。唯一的问题是,如果您使用crop() 方法更像是通用位图数据的实用程序,则此方法将不起作用,因为如果您只有一个 yourMap 实例,它会在您调用时更改所有使用它的位图的视图作物。
      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2011-01-11
      相关资源
      最近更新 更多