Haciendo CuteGodChigüire: Interpolaciones de variables

Este artículo es la parte 4 de 4 de la serie Haciendo CuteGodChiguire: desarrollando un prototipo

CuteGodChiguire: Revisión 1 La tercera revisión no tiene muchos agregados gráficos: las interpolaciones que había prometido forman parte de las animaciones del juego, pero no están implementadas todas las que quiero. Si corren el programa de esta revisión, verán que el mundo baja y sube un poco. En realidad debería subir más pero la vista llega hasta el borde del scroll, por lo que se queda allí. En este artículo explicaré un poco cómo funciona la clase de interpolaciones, llamada Tween.

Interpolaciones

Las interpolaciones están puestas en el módulo src/transitions. Allí está definida una clase llamada Tween, que se construye con los siguientes parámetros:

Tween(object, property, function, begin, finish, duration, loop = False, yoyo = False) : returns Tween

Tween es una clase que recibe un objeto, una propiedad del objeto escrita como String, una función de interpolación, el punto de inicio y el punto de fin, la duración en ticks, y dos booleanos, que dictan si la interpolación va a ciclar (loop), y si va a ciclar de inicio a fin, y de fin a inicio (yoyo = True). Por defecto los loops no se hacen. Si se utiliza un loop, por defecto se hacen de inicio y fin, y vuelven a comenzar desde el inicio.

Uso de la clase Tween

Una vez creada esta clase, la idea es llamar a su función tick() en cada intervalo de tiempo de juego para que esta misma clase actualice la variable del objeto que se le pasa. Internamente, utiliza la función setattr() de Python para lograr esto, lo que crea un gran obstáculo: no tengo manera de modificar un tipo secuencial (intentar obtener la propiedad «arreglo[0]» para un objeto que tenga una variable llamada arreglo dará error, diciendo que no existe un atributo ‘arreglo[0]‘). Esto es serio porque casi todos los atributos que tengo que modificar son tipos secuenciales, ej. posiciones de objetos. Esto es algo que no había previsto cuando pensé en la clase, y será algo que mejoraré para la siguiente revisión. La revisión actual tiene un paño caliente que resuelve la cosa para esta vez pero es definitivamente mala práctica de programación (no cookie!).

El objetivo de pasar una función de interpolación es que yo pueda obtener diversos conjuntos de valores entre el inicio y el fin. Esta revisión sólo tiene la función Linear.easeNone, y la función va de inicio a fin a intervalos constantes. Bien puedo hacer (y es lo que pienso implementar) funciones cúbicas que permitan hacer transiciones con inercia. Creo que una clase de este tipo siempre cae muy bien para hacer animaciones. Me gustaría una vez que esté madura poder empacarla y distribuirla por aquí para aquellos que quieran hacer animaciones simples desde código. Por ahora requiere mucha más atención.

Conclusión

No pude completar los objetivos que me propuse para esta revisión. Me detuvo el hecho de que aún estoy terminando de entender el uso y construcción correctos de los módulos en Python. Existen también ciertas diferencias entre ActionScript y Python que me obligan a repensar algunas de las funciones de interpolación existentes (esta es la razón por la que estas funciones aún no están implementadas). Pero definitivamente lo que más frenó mis objetos fue la implementación de las operaciones sobre imágenes, que resultó ser una tarea más complicada de lo que había pensado.

Las operaciones sobre las imágenes me han costado más, pero no por la teoría, que ya la conozco. Lamentablemente la versión más reciente de Pygame, la 1.7.1, data de agosto de 2005 ( ❗ ), y utiliza la librería Numeric, una librería que ha evolucionado bastante desde entonces, al punto de dejar de llamarse así y pasar a ser NumPy. Sumémosle a esto el hecho de que la documentación de NumPy es lo peor en documentación que haya visto para un proyecto de código abierto popular. Los tutoriales de Pygame para manipulación de colores que están en la página datan de 2001 ( ❗ ), y utilizan funciones que sencillamente no estaban en NumPy. La solución fue instalar la librería Numeric que incluyen en la página de descargas de Pygame. Me tomó varios días averiguar que las funciones utilizadas en el tutorial que no estaban en NumPy habían sido deprecadas y eliminadas de la librería.

A pesar de ello, he logrado completar los pasos necesarios para hacer transformaciones en los colores de una imagen. Sin embargo, por alguna razón que desconozco, todavía no funciona. Para la siguiente revisión espero tener listo eso y poder explicar un poco cómo se hacen las transformaciones. Arrivederchi.

Archivos

Navegar la seriePost anterior en la serie

2 comentarios en «Haciendo CuteGodChigüire: Interpolaciones de variables»

  1. Qué gran fastidio con el problema de la librería no documentada. ¿No hay alternativas?

    ¿Qué es ‘no cookie’?

    Ya que CuteGodChigüire es producto de un reto público, capaz algunos otros «contendientes» están en las mismas que tú (capaz usando Python) y han planteado soluciones a los mismos problemas. No lo se, pero siempre es recomendable buscar.

    Sigo pendiente de la evolución del juego. ¡Éxito!

    Pd. ¿Qué pasó con el nuevo diseño del sitio? (Me pareció ver que twitteaste al respecto)

  2. Lamentablemente no quedan alternativas, Joaquin, porque la forma de acceder a los pixeles de una superficie de Pygame es precisamente a través de las estructuras de datos que provee Numeric (o NumPy)

    En cuanto a «no cookie», tienes que leer la frase completa: «Bad dog, no cookie», algo así como «Perro malo, no hay galleta para tí». En este caso sería «Bad programmer, no cookie!». Hay una columna de Ernest Adams que se llama «Bad designer, no twinkie!» donde señala algunos errores comunes que hacen los diseñadores de juegos.

    Voy a ver si fisgoneo los desarrollos de otros, aunque no he visto comentarios nuevos en Lost Garden.

    El nuevo diseño del sitio ha quedado un pelín en pausa porque he estado haciendo otras cosas que requieren mayor atención (como la página de ciroduran.com, por ejemplo, que ya me ha sacado canas verdes). Pero de pana quiero poner más contenido al final que «copyright de Ciro» 😛 .

Deja un comentario