[Reubicando esta pregunta desde stackoverflow, ya que se señaló que encaja mejor aquí.]
Actualmente estoy transfiriendo mi motor de juego 2D a Java. Miré algunas de las bibliotecas de juegos apuntadas aquí en stackoverflow. Sin embargo, los que miré eran bastante simplistas y ni siquiera indicaban si admitían cosas como la transparencia alfa, por lo que decidí portar mi renderizador C ++ para el que ya había escrito la lógica.
Este procesador es un procesador de software puro que utiliza mosaico para evitar una nueva representación innecesaria. Optimicé su rendimiento de desplazamiento creando un "búfer fuera de pantalla" un poco más grande que mi panel de salida, y colocando este búfer fuera de pantalla en mi salida en cada fotograma. De esta manera, podría evitar volver a dibujar mosaicos innecesariamente solo porque desplacé un píxel en el mapa.
Utilicé AWT de Java para implementarlo, usando una imagen Buffered grande para el búfer fuera de pantalla. El uso de la CPU está bien (alrededor del doble de lo que tenía en C ++), pero hay un extraño problema con el desplazamiento continuo, donde cada segundo más o menos, el renderizador se retrasará durante aproximadamente 0.2 segundos.
Como no hay nada en mi propio código que ocurra en estos períodos, y dado que los picos desaparecen si no dibujo mi búfer fuera de la pantalla en la vista principal, solo puedo concluir que Java está haciendo una optimización interna propia. Sin embargo, no estoy seguro de lo que hace, ni sé cuál de mis optimizaciones tendría que eliminar para deshacerme de los picos. Además, puede ser que Java AWT no se haya hecho teniendo en cuenta el desplazamiento continuo y alto FPS, y eso es completamente inutilizable para este propósito.
¿Hay alguna forma de deshacerme de estos picos?