我有一个很大的精灵......我将它分成几个小的功能波纹管。该功能很好,但我的.swf的内存使用量急剧增长。AS3/Flash BitmapData .draw内存泄漏
我在做什么错?
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);
}
}
你能详细说明内存使用量急剧增长吗?将一堆位图添加到舞台上会增加内存占用空间......泄漏意味着您将删除它们,但内存不会被释放。 –
它使用30 MB到100+ MB。 以下是我想要做的事情:我正在开发一个游戏,它具有相当宽的级别(9000+像素宽和1500+高),通过一系列点(顶点)生成关卡中的地形并填充一个带有beginBitmapFill的模式。游戏在我的i5处理器上工作正常,但是当我在较慢的计算机上运行它时,帧速率从27 fps下降到大约14-17fps。 我做了一些挖掘和测试,发现大地形导致这个问题....所以开始阅读如何优化它。 – George
我向父Sprite添加了一个scrollRect - 这改进了性能,并且我正在读取关于缓存的位图...但它有其局限性...所以我决定拆分我的精灵,使其足够小以便缓存。 有关如何完成此任务的任何建议?或者提高性能的任何其他建议。谢谢。 – George