graphics.beginBitmapFill(bitmapData);
graphics.drawRect(0,0,bitmapData.width.bitmapData.height);
graphics.endFill();
bitmapData.dispose();
这段代码调用后实际上屏幕上什么都没有,而不是像感觉的那样会画出
bitmapData 的内容。也就是说 graphics.beginBitmapFill
并不是画完就完了,还和被传入的 bitmapData
参数建立了某种联系。以至于我们在 endFill
调用之后再修改 bitmapData 屏幕上的显示也会跟着变。
从另一个角度说下面的代码是危险的:
function drawingOp():Void
{
var tmpData:BitmapData=new BitmapData(width,height,true,0x00ffffff);
graphics.beginBitmapFill(tmpData);
graphics.drawRect(0,0,tmpData.width.tmpData.height);
graphics.endFill();
}
即使之后 graphics 再去 fill 别的 BitmapData,例子中的
tmpData 的内存也是不会被释放的!
我写了个例子到 CVS,名字叫
BitmapDataTest,大家可以看看内存是如何尴尬的消失的。。。。
这不知道算是个bug,还是个特性,反正我个人不太喜欢:(
他们是分离的,所以draw一次就永远在那里(除非你调用clear),然后实际上每帧更新的时候,FlashPlayer就把BitmapData中的数据根据graphics与它的联系绘制到屏幕上,这样有个好处就是,当改变内容的时候,你不用再次调用beginBitmapFill,然后draw。只需要更改BitmapData中的数据,就可以实现屏幕的变化。(只是推断,需要实践证明)
当然你提到的那种drawingOp的用法,就不行了。可能就需要把tmpData放在外面,在每次重画的时候clear.
这样的特性,能够替flash简化内存管理,但是对于用户,可能感觉有些别扭。
在 05-10-23,pawaca<paw...@gmail.com> 写道:
--
iiley
AsWing http://www.aswing.org
Blog http://spaces.msn.com/members/iiley/
--
The browser is not a television.
这个强! 看来 as3 的 api 在对待 BitmapData 和 Bitmap 上还是比较含糊。(Flash 8得更像是在应付差事-__-)
这里欢迎任何有意思的讨论,不管是as几 :P
On 10/23/05, Arri...@gmail.com <Arri...@gmail.com> wrote:
> sorry,我在上面写的是AS2,flash8,不是AS3,真不好意思,下次一定注明!
>
2005/10/24, pawaca <paw...@gmail.com>:
在 05-10-24,pawaca<paw...@gmail.com> 写道:
--
Zerlot Ma
System Engineer,Great China.
Macromedia,Inc.
Losing faith,will lose everything.
www.7yue.com