2014-05-27 5 views
0

Я вызываю изображения из библиотеки для использования. Но поскольку я буду постоянно добавлять и удалять изображения, поэтому я попытался скопировать битмапдаты в спрайт и повторно использовать спрайт.Рисование BitmapData для Sprite по-прежнему с использованием самого bitmapdata?

private function loadImage():void { 
     for (var i:int = 1; i < typeAmount + 1; i++) { 
      SlotClass = Main.queue.getLoader('main_uiMC').getClass('slot' + i + 'bmp') as Class; 
      bmpDSlot = new SlotClass() as BitmapData; 
      bmpDSlotV.push(bmpDSlot) 
     } 
    } 

    private function bitmaping():void { 
     for (var i:int = 1; i < typeAmount + 1; i++) { 
      slotS = new Sprite() 
      slotS.graphics.beginBitmapFill(bmpDSlotV[i - 1], new Matrix, false, true) 
      slotS.graphics.drawRect(0, 0, bmpDSlotV[i - 1].width, bmpDSlotV[i - 1].height); 
      slotS.graphics.endFill(); 
      bmpV.push(slotS) 
     } 

Каждый раз, когда я дублировать спрайт, профайлер FlashDevelop показал, что BitmapData добавляется также. Даже когда я использую removeChild для удаления Sprite, использование памяти не будет уменьшаться. Есть ли способ лучше скопировать содержимое bitmapdata и может быть полностью удален, когда я удалю спрайт?

* Я все еще использую изображение, только в этом конкретном раунде я хотел бы удалить спрайт с изображением.

ответ

1

Вы должны использовать один объект BitmapData, создать множество объектов Bitmap и управлять ими.

private function bitmaping():void { 
    for (var i:int = 1; i < typeAmount + 1; i++) { 
     slotS = new Bitmap(bmpDSlotV[i-1]); 
     bmpV.push(slotS); 
    } 

Создание другого Bitmap как это не добавляет другой BitmapData, он использует существующий в качестве ссылки.

+0

Сначала я пробовал растровое изображение. Но удаление дочернего элемента не будет удалять используемые данные, если я не уничтожу битмаддаты. – Hwang

+0

Не следует, правильно. Но добавление другого растрового изображения не добавит еще одну BitmapData. Кроме того, если вы хотите повторно использовать ресурс, вы должны использовать этот ресурс только в том случае, если вы даже не планируете использовать его снова. BitmapData подходит здесь IMHO. – Vesper

+0

Вы правы! я вернусь к некоторым другим функциям, которые могли бы использовать изображение, видимо, это было что-то еще, что хранит данные. удалять данные после очистки каждого раунда. – Hwang

0

Ну, ваш выбор заключается в повторном использовании BitmapData. И поскольку вам нужно несколько экземпляров одного и того же изображения, вам нужно создать новый для каждого объекта, который вы хотите добавить. И это было бы Bitmap со старым BitmapData:

var originalBMD:BitmapData = instantiateItSomehow(); 

var first:Bitmap = new Bitmap(originalBMD); 
var second:Bitmap = new Bitmap(originalBMD); 

Таким образом, вы бы повторно использовать BitmapData, и я думаю, что память будет только увеличиваться, так как объекты Bitmap, но сами данные не должны дублироваться.