我有一个大的精灵......我将它分成几个较小的精灵,功能如下。该函数运行良好,但我的.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);
}
}
答案 0 :(得分:4)
如果我没记错的话,BitmapData将永远不会被垃圾收集 - 你正在创建许多新的BMD对象,但是当你完成它们时,你必须调用myBitmapDataObject.dispose()来自己清理。我不知道如果这会有所帮助 - 你没有关于这个记忆泄漏性质的很多细节 - 但这是一个值得关注的地方。如果你没有妥善处理(),BitmapData对象会快速耗尽大量内存。