En el desarrollo de videojuegos, la consistencia visual es fundamental para la inmersión. Este artículo aborda un problema técnico recurrente en la programación de gráficos 2D: la incoherencia en el posicionamiento y escala de un personaje al cambiar de animación. En el caso de 'Leonardo's Moon Ship', el protagonista, Leo, sufría un comportamiento 'maldito': crecía un 3% al caminar y levantaba los pies hasta 27 píxeles del suelo, lo que hacía que el juego se sintiera 'roto' aunque no fuera obvio en una captura estática.
La raíz del problema reside en la naturaleza de los activos gráficos. Los artistas suelen trabajar en diferentes tamaños de lienzo según la acción que dibujen; por ejemplo, una animación de reposo puede ser de 675x1095 píxeles, mientras que una de caminata ocupa 1920x1200 píxeles. El enfoque ingenuo inicial consistía en aplicar una única escala global y un desplazamiento vertical (feet_offset_y) a todo el personaje. Esto fallaba porque la altura del personaje en píxeles y su posición vertical dentro del lienzo variaban drásticamente entre animaciones. Como resultado, el personaje no estaba centrado correctamente, violando la convención de que el nodo raíz debe estar en los pies para que las colisiones y los puntos de spawn funcionen.
La solución implementada es un método de 'métricas por animación' calculadas al cargar el juego. En lugar de adivinar la posición, el script escanea cada cuadro de cada animación buscando la 'línea visual de los pies'. Para evitar errores con sombras o anti-aliasado, el algoritmo busca la primera fila opaca desde abajo. Luego, se calcula un factor de escala y un desplazamiento específico para cada animación que normaliza su altura y posición a la de la animación de reposo (idle_right). Esto asegura que el personaje siempre tenga el mismo tamaño y que sus pies estén en el mismo lugar local, permitiendo que las sombras y las colisiones se alineen perfectamente sin necesidad de lógica compleja por cada animación individual.
