lunes 19 de enero de 2009

Crónicas de "D+D Engine" El UML crece.

Sabado 17
El ataque de los sprite`s empieza a llegar. Podrán correr pero no esconderse.


¿A que no saben quien es este?

Aunque la crónica lleba un pequeño delay con respecto a la fecha actual, el proyecto continua.

Ahora llega el turno de integar la clase Sprite
al diagrama. Si bien en la actualidad el diagrama es mucho más grande voy pasando en limpio las clases que ya implementé, por otro lado en papel esta el resto quedense tranquilos.

Esta clase no presenta ninguna complejidad algoritmica ni de diseño. Simplemente para animar el sprite tiene un par de variables int y float.


subImagen: Representa la subimagen que se va a dibujar.
velAnimacion: la velocidad de animacion.

tempFrame: Representa a la subimagen pero en numero flotante, si se le saca la parte entera nos da el valor actual de subImagen gracias a un array llamado animación.
animacion : Es un array de int, que representan las subimagenes del objeto ImagenFuente que conoce sprite, y que formaran parte de la animacion actual.
tamano: cantidad de cuadros de la animacion, o lo que es lo mismo el tamaño del array animacion.


Se contará además con una variable int llamada alpha, que como se da a entender es la que representa el alpha del sprite.


Sprite cuenta con dos métodos importantes animar(); y dibujar(SDL_surface * g, int x, int y);

Animar() se encarga de sumar velAnimacion a tempFrame, y al realizarle un cast a int nos sirve de sub indice para sacar la sumImagen a dibujar de la animacion.

dibujar(SDL_surface * g) se encarga de llamar al objeto ImagenFuente que conozca para mandarle el mensaje dibujarSubImagen, o bien dibujarSubImagenAlpha si el alpha del sprite es distinto de 255.

Todo la implementación fue bien a excepcion de la implementación del metodo animar(), que me termino dando a descubrir un error en la implementacion de ImagenFuente, y otro en la utilización de un array dinamico.

Luego de luchar un poco frente al debug, y de leer el libro que tenia a mano de C++ pedi S.O.S, pero como estaba ansioso no espere la respuesta y empeze a googlear y como siempre google nos salva la vida.

Bueno antes de desviarme del tema aqui en miniatura si se llega a ver algo es uno de los esbozos de lo más importante que lleba el UML "en limpio" (porque el otro va un poco más avanzado).

Acá estan las Clases ImagenFuente y Sprite tal cual estan implementadas. El diagrama lo hice con StarUML, que la verdad esta bastante bueno y es sencillo de utilizar.

Paso explicar lo que pormeti. La líneas sin flechas que unen dos clases indican relacion de conocimiento. En este caso Sprite conoce a un objeto de la Clase ImagenFuente y la conoce bajo la etiqueta de imagen. Para mostrar cuantoa instancias conocen una clase a la otra se coloca un numero sobre la linea (No la puse porque todavía no descubrí bien como hacerla en StarUML), un * para señalar que conoce a n instancias y 0 (cero) cuando no conoce a ninguna.
En este caso corresponde un uno sobre la palabra imagen y un cero de la linea del lado de sprite para indicar que ImagenFuente desconcose las instancias de Sprite que la conocen.

Eso es todo por ahora si alguein esta interesado en que explique un poco más del asunto solo hace falta un comentario.