lunes, 25 de febrero de 2008

Textos Multilínea

Me he encontrado con un pequeño problema. La librería SDL_ttf, que voy a utilizar para generar los textos, sólo es capaz de crear superficies SDL con textos en una sola línea. Un sprite, una línea. Podría utilizar la generación de "glifos", pero sinceramente, no me apetece. Así que me toca añadir una capa más de abstracción a la clase que se encarga de los textos, creando otra clase capaz de albergar más de un sprite cada línea del texto.
Es un poco pesado de programar, pero qué le vamos a hacer. La clase será "claseParrafoTexto".
También estoy pensando en añadir soporte para varios tipos de letra, tamaño, color, fondo... Si lo hago bien, utilizaré estas mismas clases para la generación de los menús. Si es que algún día los hago :)

viernes, 22 de febrero de 2008

Niños, recordad siempre que...

Hay que inicializar todas las propiedades privadas de una clase en C++. Siempre. Siempre. Siempre. Siempre.
Siempre.


Siempre.

Por que si no, recolectas basura de la memoria. Y empiezas a llamar a métodos y funciones con basura en sus argumentos. Y de repente tu programa casca. Sin errores aparentes. De forma aparentemente aleatoria. Y encontrar lo que falla se vuelve un infierno.

Y eso no puede ser. Por que la salud mental sufre. Y nosotros queremos mantener la salud mental. ¿Verdad? Sí... Sí...

domingo, 17 de febrero de 2008

Representación de textos en escena interactiva

Una parte importante de juego son los textos. Por eso, voy a crear una clase sólo para gestionarlos. La clase se llamará claseTextos. Los textos en realidad serán sprites generados al principio de la escena. Los constructores de la escena llamarán a los métodos de la nueva clase para generar todos los textos. Cada texto será un sprite de una lista como propiedad privada de la clase.
En la ejecución de la escena interactiva se mostrará sólo un texto a la vez. Aprovecharé esto para que la clase haga aparecer y desaparecer los textos de forma suave.
Para las escenas en las que se hable con un personaje del juego, crearé otro tipo de escena, ya que la representación de los textos será distinta.

lunes, 28 de enero de 2008

ping?

Es cierto, he dejado descuidado el blog y por lo tanto, el desarrollo. Pero tengo buenas escusas. Mudanza, falta de conexión, estudio para certificarme como administrador de sistemas...

Pero hay planes de desarrollo muy interesantes. Si hay suerte, voy a ayudar a un amigo a realizar su proyecto de fin de carrera. Más noticias pronto.

lunes, 19 de noviembre de 2007

Progreso lento, planes interesantes.

La vida es lo que te interrumpe mientras codeas.
Ya se ha superado el tema de pinchar en los sprites.
Ahora tengo que implementar las llamadas a los eventos-acciones. No creo que me cueste mucho. Seguramente haré un par de escenas de ejemplo.
Ahora estoy pensando en construir el sistema de interfaz, que serán dos bandas negras para convertir el juego en una especie de película "cinemascope". En estas bandas aparecerá la puntuación, los mensajes y las descripciones, los diálogos, etc.
Para las escenas de lucha tengo grandes planes y una colaboración. El engine contará con una característica muy interesante.

Más noticias pronto.

miércoles, 7 de noviembre de 2007

ping?

pong!

lunes, 22 de octubre de 2007

Píxeles de SDL_Surface y eventos de sprite.

Al final era más fácil de lo que yo creía. Hay un ejemplo en la documentación de libSDL que explicaba perfectamente cómo hacerlo. Copiaré el código con muy pocos cambios. Así, la detección de sprites pinchados se queda de la siguiente manera:

1.- Crear propiedad privada del sprite que sea un SDL_Surface con tamaño igual al de la superficie de la pantalla y 8 bits de profundidad con flag SWSURFACE. Esta superficie será la máscara.
2.- Cuando se cree un frame del sprite, crear una copia del frame a 8 bits como "sombra", también con flag SWSURFACE
3.- cuando se pida un tick del sprite (actualización de animación y frame para hacer blitting a la pantalla), rellenar la superficie máscara de un color concreto (¿rosa? ¿verde fosforito? ¿azul puro?) y hacer blit de la sombra del frame actual sobre la superficie máscara.
4.- para saber si el ratón ha pinchado sobre nuestro sprite, sacamos el color del pixel donde está el ratón de la máscara. Si no es el color de fondo asignado, hemos pinchado en nuestro sprite y disparamos evento de usuario de SDL, que a su vez disparará una o varias acciones de la lista de acciones de la escena.

A ver si esta tarde o mañana lo programo.