Optimizar el rendimiento del juego mediante el escalado de imágenes UNA SOLA VEZ al cargarlas (en lugar de escalarlas en cada frame), manteniendo al mismo tiempo la nitidez característica del pixel art.
Antes de realizar cualquier optimización, necesitamos una forma de medir el rendimiento actual y verificar las mejoras posteriores. Esta implementación nos permitirá visualizar en tiempo real cuánto tiempo tarda el motor en renderizar cada frame.
1.1 Modificar PanelJuego.java
Agregar variables de clase:
// Sistema de medición de rendimiento
private boolean checkDrawTime = true; // Cambiar a false para producción
private long drawStart;
private long drawTime;
Lógica: Estas variables nos permitirán registrar el tiempo de inicio y fin del proceso de renderizado. checkDrawTime actúa como un interruptor para habilitar/deshabilitar esta funcionalidad en producción.
Modificar el método paintComponent:
public void paintComponent(Graphics g) {
super.paintComponent(g);
// ⏱️ INICIO DE MEDICIÓN
drawStart = System.nanoTime();
Graphics2D g2 = (Graphics2D) g;
// tiles
tileManager.draw(g2);
// objetos
for (int i = 0; i < objs.length; i++) {
if (objs[i] != null) {
objs[i].draw(g2, this);
}
}
// jugador
jugador.draw(g2);
// UI (HUD) - ¡SIEMPRE AL FINAL!
ui.draw(g2);
// ⏱️ FIN DE MEDICIÓN Y VISUALIZACIÓN
drawTime = System.nanoTime() - drawStart;
if (checkDrawTime) {
g2.setColor(Color.WHITE);
g2.drawString("Draw Time: " + drawTime + " ns", 10, 400);
g2.drawString("Draw Time: " + (drawTime / 1000000.0) + " ms", 10, 420);
}
g2.dispose();
}
Lógica:
System.nanoTime() para obtener mediciones precisas del tiempo de renderizado.g2.dispose() libera los recursos gráficos utilizados, evitando fugas de memoria.Resultado esperado: Verás el tiempo de renderizado en pantalla. Después de la optimización, este valor debería reducirse significativamente.