Durante la creazione del motore di animazione si è visto che l'aggiornamento dello schermo sfarfallio si verifica indesiderabile. Questo effetto è dovuto al tempo necessario per cancellare l'immagine e generare un nuovo aggiornamento, risultato di oggetti animati.
Una tecnica per evitare questo è il cosiddetto doppio buffer o “doublebuffered“, quindi usiamo due immagini (grafici ricordi) allo stesso tempo. Mentre si disegna in uno, Vediamo l'altro e ridurre al minimo il tempo di commutazione tra immagini eliminando lo sfarfallio.
In informática, buffering di più è l'uso di più di un buffer per mantenere un blocco di dati, affinché un “Lettore” si vedrà una versione completa dei dati, invece di una versione parzialmente aggiornata dei dati che sono stati creati da un “scrittore”. Serve anche per evitare la necessità di utilizzare la RAM dual-port, Quando i lettori e scrittori sono dispositivi diversi.(Gli)
Modificheremo la classe “Lavagna” che abbiamo modificato per incorporare la motore di animazione per implementare questa tecnica. Avremo bisogno di conoscere le dimensioni del display grafico per memorizzare memoria sufficiente, e definiamo un oggetto “Immagine” Sarà circa cui disegnerà grafica.
Dimensione d; private MImage immagine = null;
Il metodo “dipingere” disegno che si otterrà prima la dimensione dell'immagine da creare. La chiamata alla funzione “checkOffScreenImage()” sarà responsabile per assicurarsi che un oggetto “mImage” sul pareggio.
Per disegnare questo oggetto che vi chiediamo il tuo indirizzo grafico con la funzione “Metodo M:Microsoft.WindowsMobile.DirectX.Direct3D.Surface.getGraphics“. Quindi riempiamo il colore utilizzato per disegnare un rettangolo pieno su questo elemento di sfondo.
Chiameremo le routine di immagine disegnata, che ho implementato nella funzione “paintOffScreen” passando questo grafico come oggetto parameter in modo è possibile utilizzarlo come una tela.
L'ultima funzione si baserà sullo schermo la tela o immagine generata.
public void sincronizzato dipingere(Graphics g) { d = getSize(); checkOffScreenImage(); Grafica offG = mImage.getGraphics(); offG.setColor(getBackground()); offG.fillRect(0, 0, d.Width, d.Height); paintOffScreen(mImage.getGraphics()); g. DrawImage(mImage, 0, 0, null); }
Funzione “checkOffScreenImage()” Egli controllerà se modificate le dimensioni della finestra utilizzata per visualizzare informazioni grafiche e generare un oggetto su cui disegnare, utilizzando la funzione “createImage()“
private void checkOffScreenImage() { Dimensione d = getSize(); se (d.Width = = 0 || d.Height = = 0) { ritorno; } se (mImage = = null || mImage.getWidth(null) != d.width || mImage.getHeight(null) != d.height) { mImage = createImage(d.Width, d.Height); } }
Funzione “paintOffScree” è la vecchia funzione o metodo “dipingere” Disegna i nostri oggetti grafici, così non merita ulteriori commenti. Abbiamo semplicemente cambiato il suo nome.
public void paintOffScreen(Graphics g){ Enumeration enum=bd.elements(); Object ob; while(enum.hasMoreElements()){ ob=enum.nextElement(); se(Instanceof OB SimpleDrawable){ ((SimpleDrawable) ob).dipingere(g); } } }
Quando si esegue l'applicazione, che vedremo verificarsi uno sfarfallio dell'immagine è scomparso.
Deve essere collegato per pubblicare un commento.