lunes, 30 de marzo de 2009

Elementos básicos con CEGUI

He estado trabajando estos días para extender la funcionalidad de GamegineCEGUI, aunque debo aceptar que es un trabajo que requerirá muchos días (o semanas) para que implemente todas las funcionalidades que nos ofrece CEGUI.

Por ahora, he terminado de implementar wrappers para: Label, TextBox, Button, RadioButton, CheckBox y ComboBox. Ha quedado todo muy bien y fácil de utilizar.

Elementos básicos en Gamegine + CEGUI

El problema que tengo ahora es uno a nivel de Link al momento de definir los eventos para los controles. Hay 2 formas de lograr eso: la primera es mediante objetos que hereden de la clase Event, MouseEvent, etc; el segundo es utilizando EventListeners, que son clases especializadas (templates). Con estos últimos, asignar un evento a un control será cosa de niños. Solo falta resolver ese problema...

Sin embargo, todo este trabajo nos da la posibilidad de crear interfaces sencillas y tremendamente funcionales, como la que estoy diseñando para BrainRush! (nombre provisional), un juego experimental en el que estaré trabajando las siguientes semanas. Les confieso que llevo apenas unas horas trabajando en el proyecto y me siento emocionado... Esto me permitirá dejar el framework a punto.

Les comparto el boceto que hice para el menú principal del juego:

 
BrainRush!, boceto del menú principal


.

miércoles, 18 de marzo de 2009

Gamegine + CEGUI

Finalmente, una versión compilable de GamegineCEGUI, un wrapper que nos ha de permitir crear entornos gráficos con suma facilidad. Aunque por ahora solo se puede crear etiquetas... Cuando menos, la funcionalidad ya está terminada, lo que sigue es la talacha de implementar los componentes y propiedades que nos ofrece CEGUI.

Demo: Hello world!

He quedado bastante satisfecho con la forma en la que se crean los controles. Es muy sencillo realizarlo y más aún cargarlos de un archivo de template creado con el editor de CEGUI.

Por ejemplo, para crear una hoja con controles, será necesario crear un formulario (muy a la Microsoft):
Form* form = GameGUIDevice::getSingleton().createForm("Demo");

Posteriormente, crearemos los controles basándonos en esta plantilla:
Label* lbl = form->createLabel( "Label" );
lbl->setText( "Hello world!" );

Y, finalmente, desplegamos el formulario en pantalla:
form->load();

El resultado es el que vemos en el screenshot mas arriba :D

Por otro lado, en un mes aproximadamente se vence el dominio gamegine.net, por lo que tengo que decidir si pago otro año más con él, o cambio el dominio a gamegine.org.

Se aceptan ideas...

.

domingo, 15 de marzo de 2009

GUI Device en el horno

¿Que se cocina en el horno? Se preguntan. Se trata de un dispositivo para el control de interfaces gráficas. Quienes hayan trabajado con algún IDE (como .Net, por ejemplo) se preguntarán: "¿Para qué? Si puedes crear interfaces fácil y rápido con mi Visual Studio". La respuesta es: Gamegine, al igual que sus componentes, debe permanecer como un framework multiplataforma. De ahí nace la necesidad de implementar un mecanismo de interfaces gráficas.

Hay muchos en el mercado, y no todos son gratuitos. La idea aquí, como en otras cuestiones, es permitirte trabajar con un dispositivo y luego  cambiar a otro sin tener que reescribir toda tu aplicación. Aquí es en donde entra Gamegine en escena.

Por ahora, estoy trabajando con Crazy Eddie's GUI System (CEGUI) que me parece muy bueno, aunque un tanto difícil de acostumbrarse a su modo de trabajar.

En fin, falta mucho trabajo en este dispositivo (como en todos los otros), pero poco a poco irán creciendo y madurando. Mientras tanto, deben existir para permitirnos crear juegos con facilidad.

.

miércoles, 4 de marzo de 2009

nuevas ideas...

Gamegine sigue en el horno. Como tal, ha estado muy estable estos días, por lo que nos acercamos al primer beta del framework!!

Por otro lado, me he pasado más de 2 semanas creando librerías para cargar heightmaps en Gamegine, así como mejoras al mecanismo de deserialización de una escena. Gran parte de estas librerías (GameginePhysx) sigue sin funcionar adecuadamente. Es bastante frustrante el tener que hacer librerías y más librerías para interpretar lo que otros programas te ofrecen; sin embargo, estoy consciente de que, para estudios de desarrollo de bajo presupuesto, no te queda más que utilizar herramientas económicas y escribir toda clase de importers para tu engine...

En mi caso, he estado planeando el desarrollo de un nuevo videojuego creado con Gamegine (si, uno más a la cuenta). No les platico más, porque es algo que aún tiene que madurar bastante. De lo que sí estoy seguro, es que estaría de lujo tener un editor dentro del juego. ¿Un editor para que? Espero pronto poder platicarles más al respecto.

¿Me preguntan por JUN? Algún día terminaré de desarrollarlo...

Por otro lado, ya he comenzado a dormir un poco más temprano otra vez y mi rutina de sueño comienza a regresar a la normalidad. Han ocurrido muchas situaciones estresantes en el trabajo, lo que me han impedido dormir bien estos días...

En fin, el caso es que estoy jugando con la idea de crear un editor para Gamegine. De hecho, estuvo en el plan desde el inicio, pero crear un programa como estos es algo de pensarse. De entrada, porque hay muchos editores disponibles y algunos con un precio muy accesible. Tengo algunos, incluso, pero no logro acostumbrarme a la idea de crear algo en ellos y luego crear intérpretes de los archivos para mis programas. Ya estoy cansado de esa idea y siento que pierdo demasiado tiempo tratando de encontrar los patrones o adivinar el funcionamiento de tal o cual cosa... El punto es que ando evaluando la posibilidad de retomar el desarrollo de un proyecto que llamé WorldMonster, un editor de niveles especializado para proyectos desarrollados en Gamegine. Veamos a que puedo llegar en estos días...

.