Juego de rol 2D 74: contar objetos dibujados

A medida que avanza el desarrollo del juego, cada vez dibujaremos más y más objetos en el canvas (imágenes, rectángulos y texto principalmente). Cuantos más objetos dibujamos, más lenta es la operación en general, con lo cual la tasa de frames por segundo seguirá bajando y bajando (recordemos que una de las operaciones más costosas es la de dibujar, aparte de la lectura y escritura de archivos). Es recomendable que la tasa de frames pueda mantenerse por encima de 60FPS en casi cualquier equipo (como mínimo 30FPS, pero eso no es muy recomendable debido al retraso con los controles).

Así pues, es muy recomendable que podamos controlar en todo momento el rendimiento y el efecto que tienen en el mismo los gráficos. Ya tenemos un contador de FPS, pero sería bueno tener algo más.

Por eso, en este episodio, vamos a crear un contador que nos indique cuantos objetos estamos dibujando en cada frame, de forma que podamos controlar si estamos haciendo algo mal o reduciendo demasiado el rendimiento con dibujos innecesarios (o mal optimizados).

Para eso, tenemos que crear un método envoltorio (wrapper) que ejecute y cuente cada operación de dibujo que realizamos. Para no complicarnos excesivamente, lo mejor es simplemente crear una clase estática con una serie de métodos que sirvan para dibujar los objetos que queramos y a la vez cuenten la operación en una variable también estática.

Es recomendable crear los métodos más comunes: dibujar imágenes, strings y rectángulos. Además, es recomendable sobrecargar cada método para diferentes utilidades (con o sin color, con contorno o sin contorno, a partir de coordenadas sueltas X-Y, objeto Point u objeto Rectangle, etc.

Una vez preparado todo, sólo queda sustituir todos los métodos que dibujen objetos por los que acabamos de crear y luego mostrar el contador de objetos por frame (lo llamaremos “OPF”).

¿Te ha gustado? ¡Colabora en Patreon!

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *