AS3 / Flash BitmapData .draw内存泄漏

时间:2011-07-07 22:59:12

标签: flash actionscript-3 flash-cs5 bitmapdata

我有一个大的精灵......我将它分成几个较小的精灵,功能如下。该函数运行良好,但我的.swf的内存使用量急剧增长。

我做错了什么?

private function split_sprite(sp:Sprite,the_parrent:Sprite) {


    var region:Rectangle = new Rectangle();
    region = sp.getBounds(the_parrent);

    var w=region.width/10;
    var h = region.height ;

    for (var i=0;i<10;i++){ 
            //Build Matrix Transform
            var mat:Matrix= new Matrix(1,0,0,1, 0-w*i, 0 );
            sp.transform.matrix = mat;

            //Draw the bitmap
        var temp:BitmapData = new BitmapData(w + 2 , h, true, 0x000000);


            temp.draw(sp,mat);

            //Attach the BitmapData to a Bitmap Instance
            var myBitmap:Bitmap = new Bitmap(temp);
            myBitmap.smoothing = true;
            //Re apply an Inverse Matrix
            mat = new Matrix(1,0,0,1, region.x, region.y);
            myBitmap.transform.matrix = mat;
            var spp=new Sprite();
             //spp.cacheAsBitmap=true;
            spp.addChild(myBitmap);
            spp.x=w*i;
            the_parrent.addChild(spp);


    }



}

1 个答案:

答案 0 :(得分:4)

如果我没记错的话,BitmapData将永远不会被垃圾收集 - 你正在创建许多新的BMD对象,但是当你完成它们时,你必须调用myBitmapDataObject.dispose()来自己清理。我不知道如果这会有所帮助 - 你没有关于这个记忆泄漏性质的很多细节 - 但这是一个值得关注的地方。如果你没有妥善处理(),BitmapData对象会快速耗尽大量内存。