AS3 / Flash BitmapData. Утечка памяти - PullRequest
1 голос
/ 08 июля 2011

У меня большой спрайт ... и я делю его на несколько меньших с функцией ниже.Функция прекрасно работает, но использование памяти моего .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 Ответ

4 голосов
/ 08 июля 2011

Если я правильно помню, BitmapData никогда не будет собирать мусор - вы создаете много новых объектов BMD, но когда вы закончите с ними, вы должны вызвать myBitmapDataObject.dispose () для очистки после себя.Не знаю, поможет ли это - у вас не так много подробностей о природе этой утечки памяти - но это одно место, на которое стоит обратить внимание.Объекты BitmapData могут быстро поглотить много памяти, если вы неправильно утилизируете ().

...