2012-01-29 2 views
0

Я пытаюсь изменить растровое изображение, чтобы изменить их пиксели на случайный цвет. Это так, как я это сделать (я использую библиотекуFlashPunk):Как изменить изображение динамически

private var _v:Point = new Point; 
private var _speed:Point = new Point(200, 200); 
private var _bmpData:BitmapData = new BitmapData(24, 24, false, 0x000000) 
private var _bmpImage:Image = new Image(_bmpData); 

public function Player(p:Point) 
{ 
    graphic = _bmpImage; 
    x = p.x; 
    y = p.y; 
} 

override public function update():void 
{ 
    updateMovement(); 
    updateCollision(); 

    super.update(); 
} 

override public function render():void 
{ 
    _bmpData.lock(); 
    for (var j:int = 0; j < _bmpData.height; j++) { 
     for (var i:int = 0; i < _bmpData.width; i++) { 
      _bmpData.setPixel(i, j, FP.rand(0xffffff)); 
     } 
    } 
    _bmpData.unlock(); 

    graphic = new Image(_bmpData); 
    super.render(); 
} 

Так хорошо, функция, которая делает это делают(), но в линии

graphic = new Image(_bmpData); 

Я получаю новую память для графики, и это означает утечку памяти в игре. Вот изображение этого: enter image description here И как вы можете видеть, MEM: часть постоянно увеличивается:/

Любой знает другой способ сделать это?

+0

Почему вы не можете просто «освободить» графику перед вызовом «нового изображения»? – Dan

+0

Если я поставлю delete (рисунок); перед новым Image() я получаю следующую ошибку: Ошибка: попытка удалить графику фиксированного свойства. Только динамически определенные свойства могут быть удалены. удалить (рисунок); Я новичок в AS3, так что наверняка это будет тривиальный вопрос, но я не нахожу ответа:/ – Puyover

+1

Не можете ли вы просто установить 'graphic.bitmapData' в измененное значение вместо использования' new Image() 'каждый раз? – weltraumpirat

ответ

0

В конце концов, я только должен был заменить

graphic = new Image(_bmpData);

для

_bmpImage.updateBuffer(); и теперь он работает отлично :)

Here is the doc for that function Ура!

Смежные вопросы