En primer lugar, usted debe comprobar y ver la cantidad de tiempo se gasta en su propio código, en comparación con la cantidad de tiempo que se dedica realmente al dibujo del marco. Puede tener algún error o falla que lo haga funcionar más lentamente.
Debería poder obtener un rendimiento mucho mejor que 98ms para dibujar la pantalla. Esas bibliotecas de juegos probablemente usarán las mismas llamadas gráficas que usted. Pero los contenedores que usa pueden tener un gran impacto en la rapidez con que se dibujan las cosas. Recuerdo que hace un par de meses que trabajaba en un código de gráficos con búfer doble y cómo se creó el búfer posterior hizo una gran diferencia en el rendimiento.
En particular, asegúrese de crear solo una imagen de fondo una vez o al menos, solo cuando cambie el tamaño de su lienzo. En mi código sorteo hago esto:
//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();
}
Así que el avión de vuelta solamente se crea si es nuevo o si se cambia el tamaño del componente. Esto tiene un gran impacto en la velocidad.
He estado haciendo programación de gráficos en Java desde JDK 1.0. De hecho, nunca había escuchado sobre esta cosa de BufferStrategy. Je.
Nunca he tenido problemas para obtener buenas velocidades de cuadros con llamadas básicas de gráficos java. Otra cosa a tener en cuenta es asegurarse de que Swing no intente borrar el fondo de su componente por usted. Esa puede ser otra fuente de desaceleración.
¿Puedes publicar algo de tu código de pintura? y lógica de reloj/temporizador? – basszero
La lógica de reloj/temporizador es simplemente la diferencia de dos valores largos obtenidos a través de System.currentTimeMillis().Sé que no es un buen enfoque para medir el tiempo de esta manera, pero solo quería un cálculo aproximado de cuánto tiempo lleva. El código de pintura simplemente dibuja una imagen estática en el lienzo. Así que solo es g.drawImage (img, 0, 0, null) donde g se obtiene a través de la variable BufferStrategy. –