/ / AS3: Konieczność graphics.clear? - actionscript-3, pamięć, grafika, rysowanie

AS3: Konieczność grafiki. Czyszczenie? - actionscript-3, pamięć, grafika, rysowanie

Mam funkcję, która odrysowuje kształt za każdym razem, gdy zostanie wywołany

function drawIt():void {
myShape.graphics.clear() //Is this necessary?
myShape.graphics.beginFill(newColor);
myShape.graphics.drawRect(0,0,w,h);
myShape.graphics.endFill();
}

Jeśli ta funkcja jest wywoływana często jako animacjakolor i nie robię grafiki.clear () za każdym razem, czy mam w końcu duży stos prostokątów jeden na drugim, który pożera garść pamięci?

Odpowiedzi:

1 dla odpowiedzi № 1

Aby odpowiedzieć na twoje pytanie, spójrz na ten prosty test:

var init_memory:uint = System.totalMemory;

var shape:Shape = new Shape();
for(var i:int = 0; i < 1000; i++){
shape.graphics.clear();
shape.graphics.beginFill(0xff0000);
shape.graphics.drawRect(0, 0, 10, 10);
shape.graphics.endFill();
}

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

pozwól nam teraz skomentować tę linię:

//shape.graphics.clear();

otrzymujemy:

trace(System.totalMemory - init_memory);    // gives : 102400 (bytes)

i tylko dla jednego kształtu:

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

Myślę, że nie potrzebowałeś żadnego komentarza, aby zrozumieć, dlaczego powinieneś skorzystać graphics.clear() ...

Nadzieja, która może pomóc.


2 dla odpowiedzi nr 2

Jest to konieczne, albo będzie nowy rysunekdodano na poprzedniej. Jeśli nie jest to efekt, którego potrzebujesz, musisz wywołać polecenie clear, aby usunąć poprzedni rysunek. To zachowanie może być użyte na swoją korzyść, aby przyciąć część poprzedniego rysunku. Możesz narysować prostokąt, powiedzmy, czarny, a następnie narysuj okrąg (ten sam kolor), a wynikiem będzie plon.

Konkluzja: jeśli nie wywołasz polecenia wyczyść cały rysunek, dodaj jeden nad drugim.