Prima di tutto, si dovrebbe controllare e vedere quanto tempo viene speso nel proprio codice rispetto a quanto tempo viene speso effettivamente per disegnare la cornice. Potresti avere qualche bug o malfunzionamento che lo fa girare più lentamente.
Si dovrebbe essere in grado di ottenere prestazioni migliori di 98 ms per disegnare lo schermo. Queste librerie di giochi probabilmente useranno le stesse chiamate grafiche come faresti tu. Ma quali contenitori usi possono avere un grande impatto sulla rapidità con cui le cose si disegnano. Ricordo un paio di mesi fa che lavoravo su un codice grafico a doppio buffering, e come il buffer posteriore è stato creato ha fatto un'enorme differenza nelle prestazioni.
In particolare, assicuratevi di creare solo un'immagine di sfondo una volta o almeno, solo quando la tela viene ridimensionata. Nel mio codice pareggio faccio questo:
//create a graphics backplane
if(backplane == null || !backplaneSize.equals(this.getSize())){
backplane = this.createImage((int)this.getSize().getWidth(), (int)this.getSize().getHeight());
backplaneSize = this.getSize();
}
Così l'aereo per tornare solo si crea se si tratta di nuovo, o se il componente viene ridimensionato. Questo ha un impatto enorme sulla velocità.
Ho eseguito la programmazione grafica in Java da JDK 1.0. In realtà non avevo mai sentito parlare di questa cosa di BufferStrategy. Eh.
Non ho mai avuto problemi a ottenere una buona frequenza di fotogrammi con le chiamate di grafica java di base. Un'altra cosa da tenere a mente è assicurarsi che Swing non stia cercando di cancellare lo sfondo del componente per te. Questa può essere un'altra fonte di rallentamento.
fonte
2009-12-12 15:54:27
Puoi pubblicare un po 'del tuo codice pittura? e la logica orologio/timer? – basszero
La logica orologio/timer è semplicemente la differenza di due valori lunghi ottenuti tramite System.currentTimeMillis().So che non è un buon approccio per misurare il tempo in questo modo, ma volevo solo una stima approssimativa di quanto tempo ci vuole. Il codice del disegno disegna semplicemente un'immagine statica sulla tela. Quindi è solo g.drawImage (img, 0, 0, null) dove g è ottenuto tramite la variabile BufferStrategy. –