Accessibilità

Articolo su Flash

 

Varicose-g: Grafici ad Alte Prestazioni con Flash 8


Indice

Aumentare le Performance Tramite Caching Bitmap Personalizzabili

Con il Flash Player 8, ho pensato che avrei potuto migliorare molto le performance e la persistenza di varicose-g memorizzando i vettori come bitmap. Il mio pensiori iniziale fu quello di impostare l'area VeinManager per utilizzare il bitmap caching integrato:

// Imposto l'area per memorizzare la bitmap automaticamente:
canvas.cacheAsBitmap = true;

Mentre questo produce un maggior aumento delle performance, continua a rallentare man mano che le vene vengono aggiunte. Questo perchè i vettori vengono ricompositi e ridisegnati in ogni fotogramma. Con più vettori vengono disegnati e più il tempo di ricomposizione aumenta rallentando l'intero esperimento.

Ho quindi realizzato una routine di caching bitmap personalizzata. Su ogni fotogramma, la classe VeinManager rileva tutti i nuovi vettori che sono stati disegnati dalla classe Vein e li compone ion una bitmap utilizzando il metodo di disegno BitmapData e quindi ripulisce tutti i vettori—i vettori non sono mai renderizzati fa Flash per essere mostrati, vedete sempre la bitmap. Questo significa che l'utilizzo della CPU per la composizione non aumenta mail, non ha importanza per quanto tempo l'esperimento è in funzione e quante vene vengono disegnate. In oltre, siccome riutilizzo lo stesso oggetto BitmapData in ogni fotogramma, la quantità di RAM che il sistema utilizza non aumenta.

Il codice semplificato per realizzare la memorizzazione personalizzata è come segue:
/* Questo codice viene eseguito una volta */
// Impostazione dell'oggetto BitmapData:
canvasBmp = new BitmapData(WIDTH,HEIGHT,true,0);
// Mostrre la bitmap nella clip "image":
canvas.image.attachBitmap(canvasImage,1);
// Impostazione della matrice che sarà utilizzata per disegnare le vene nella bitmap:
mat = new Matrix ();
/* Questo codice viene eseguito su ogni fotogramma */
// Disegnare i nuovi vettori su canvas.veins
// Gurdate il sorgente di Vein per i dettagli.
// Composizione dei vettori per l'oggetto BitmapData in ogni fotogramma:
canvasBmp.draw(canvas.veins,mat);
// Eliminazione dei vecchi vettori:
canvas.veins.clear();