Juegos con GNUstep

Ahora que me ha dado la manía de desarrollar juegos para PC, me he puesto a aprender OpenGL. Por supuesto, esto no es cosa de un día, pero ya aprendí como iniciar OpenGL en una app de GNUstep. Aunque también me queda la duda de si es posible desarrollar un juego utilizando completamente el framework GUI. Actualmente existen juegos desarrollados con GNUstep como Oolite y CoreBreach, pero hacen uso de SDL y OpenGL. Por supuesto existen otros juegos sencillos desarrollados completamente con el framework GUI, como los del proyecto GAP. Pero en este artículo voy a explicar lo básico para iniciar OpenGL en una app de GNUstep.

Primero debe crearse una app ya sea con ProjectCenter, Gemas o Emacs (o escribiendo todo a mano). Seguidamente debe agregarse un outlet, en mi caso lo llamo glView, en la clase que hace de controlador. Este outlet debe conectar con el CustomView de la interfaz gráfica, el cual debe ser una instancia de una subclase de la clase NSOpenGLView, en este ejemplo llamo a esta clase GameGLView. Entonces en la clase que hace de controlador, y que es el delegate de la aplicación, en el método -applicationDidFinishLaunching: escribimos:

opengl1

El método -refresh, implementado en GameGLView, es obviamente el encargado de actualizar el escenario. El código de esta última clase es el siguiente:

opengl2

El método -prepareOpenGL es el encargado de preparar OpenGL y es llamado únicamente una vez al crearse la instancia. El método -drawRect: es el método encargado de actualizar el contenido del escenario. Por supuesto, este método no debe llamarse nunca directamente, de allí el método -refresh. El método -reshape es encargado de actualizar la escena cuando la ventana es redimensionada, aunque en este ejemplo no hace mayor cosa. Para el que conozca de OpenGL notara que lo único que hace esta app es dibujar un rectángulo de color blanco. Esto se muestra en la siguiente imagen:

opengl3

Todo esto es muy básico, pero iré compartiendo mis avances en este campo. Por lo demás, haré un pequeño experimento para ver la factibilidad de crear un juego 2D utilizando únicamente el  framework GUI. Por supuesto, me refiero a un juego mas complejo que los disponibles en GAP.

4 comentarios en “Juegos con GNUstep

  1. OpenGL lo he intentado varias veces y nunca he pasado de hacer helloworlds. Un gran problema que creo que existe es que la mayoría de los tutoriales que circulan por internet al parecer están desfasados: http://math.hws.edu/eck/cs424/notes2013/11_OpenGL_1_Problems.html . Y a partir de OpenGL 2.0 yo creo que es mucho más complicado de entender para novatos como yo.
    También me ha llamado mucho la atención que los juegos que mencionas uticen GNUstep, no lo sabía.

    Un saludo.

    • Si, es lamentable lo de los tutoriales, la mayoría se centran en como dibujar con OpenGL. Sin embargo yo ya tengo una idea de como realizar este experimento en 2D. Por supuesto, no es mi intención ponerme a hace animaciones directamente con OpenGL, primero porque no tengo el tiempo, segundo porque no tengo los conocimientos y tercero porque tampoco tengo las ganas. Sino utilizar imágenes para los fondos y personajes y desplegarlos como texturas con OpenGL, dejando a GNUstep encargado de determinar que imágenes desplegar en que momento. Claro, la ventaja con OpenGL estaría a la hora de realizar efectos de agua, fuego, etc. Algo que sería imposible (o muy complicado) con el framework GUI. Como sea, aquí iré publicando el resultado de mis experimentos. Saludos.

  2. Muy interesante. No sabia que existian juegos desarrollados con estas tecnologias, ¿sabes que tan complicado es hacer juegos multiplataforma con GNUStep y OpneGL? porque veo que el ejemplo es solo para Mac. Saludos.

    • Hola Carlos. No entiendo bien tu pregunta, el ejemplo que muestro lo realice en mi Trisquel 6. Y debería también funcionar en Windows y (con algunas pequeñas modificaciones) en Mac. Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s