Las librerías normalmente se enlazan en tiempo de compilación con el programa para poder crear un ejecutable único, aunque también cabe la posibilidad de enlazarlas dinámicamente en tiempo de ejecución.
Las API
pueden ser genéricas o específicas para un hardware concreto:
• Las genéricas incluyen aquellas API independientes de la plataforma, como por ejemplo OpenGL o DirectX.
• Las específicas incluyen API que están optimizadas únicamente para sacar el máximo provecho de un tipo de hardware, como por ejemplo las librerías Glide de la desaparecida 3dfx.
Para un programador de videojuegos, una API proporciona un sistema de abstracción que evita que tengamos que conocer los detalles técnicos del hardware del sistema, pudiéndonos centrar más en los detalles del juego.
¿Cuándo
utilizar una API?
La decisión de utilizar una API depende de varios factores:
• Si se recibe un encargo para hacer un videojuego en un plazo corto de tiempo (por ejemplo, para hacer coincidir la presentación de una película y el videojuego) nos veremos obligados a utilizar librerías para cumplir con el timing.
• También puede interesarnos utilizar una serie de librerías que nos faciliten la mayoría del trabajo técnico (gráfico, sonido, scripting) y podamos dedicar todos nuestros recursos a desarrollar e implementar la lógica del juego y todo el concept art.
• Al hacer nuevas versiones, podemos seguir utilizando el código que hicimos para las primeras entregas del videojuego adaptándolas a las arquitecturas actuales. Nos evitaremos reimplementar código nuevamente, aunque no es una opción muy utilizada.
• Por otro lado, si implementamos nosotros todo el código, nos será más fácil implementar acciones concretas en el desarrollo del juego que apartar librerías externas. Por ejemplo, utilizar un motor gráfico comercial especializado en juegos FPS nos será complicado de adaptar en un videojuego de carreras de coches.
Las principales API que se utilizan en el desarrollo de videojuegos son:
• API gráficas. Permiten acceder a todas las prestaciones del hardware. Las dos más utilizadas son OpenGL y DirectDraw/Direct3D.
• API físicas. Se trata de API que describen el comportamiento físico real de los objetos cuando están sometidos a fuerzas y movimientos. Entre muchas otras características, nos facilitan el control de colisiones. Algunos ejemplos son Havok, Ode, Newton, Tomahawk, Novodex...
• API de red. Nos permiten crear sockets de conexión entre dispositivos, enviar información y controlar el estado de las comunicaciones. Están adaptadas para soportar todo tipo de configuraciones, desde cliente-servidor a peer-to-peer. Algunos ejemplos son DirectPlay, Rakknet, SDL_net...
• API de sonido. Nos permiten reproducir sonidos, canciones, trabajar con las ondas o bien posicionar elementos sonoros en un entorno tridimensional. Algunas de las librerías más utilizadas son DirectSound, OpenAL, Fmod, PortAudio...
• API de interfaz. Permiten la programación de los diferentes dispositivos de entrada, como ratones, joysticks, volantes... También permiten el control de algunas características de estos dispositivos, como la vibración o el force feedback. Las más utilizadas son DirectInput y SDL_Input.
• Otras API. También podemos encontrar otras librerías que nos evitarán la programación de algunas funciones específicas, como tareas rutinarias de inteligencia artificial, búsqueda de caminos o gestión de un grafo de estados (por ejemplo, OpenAI o PathLib), que nos permiten integrar scripting en el sistema (por ejemplo, LUA) y que nos permiten gestionar estructuras de datos complejas (por ejemplo, STL).
Muchas de estas API las podemos encontrar en frameworks más complejos que ya incorporan todos los elementos necesarios para el desarrollo de aplicaciones multimedia. Los dos más famosos son DirectX de Microsoft y el SDL (simple directmedia layer) de libre distribución.
En el caso de los dispositivos portátiles (PDA, PocketPC y Smartphones) tenemos algunas restricciones en las API explicadas anteriormente:
• En Windows Mobile podemos encontrar dos API diferentes. Los sistemas anteriores a la versión 2003 cuentan con su propia interfaz de desarrollo llamada Game API (GAPI). A partir de Windows Mobile 2005, el sistema incorpora una versión reducida de las DirectX. La programación con estas API se realiza de forma muy parecida a las DirectX estándar, con lo que se facilita la tarea a los programadores acostumbrados a ellas. En Windows Phone 7 la programación se realiza mediante las librerías XNA versión 4 o superior. Estas librerías proporcionan un framework que facilita todo el proceso de programación de un juego, incorporando una capa de abstracción más por encima de la API DirectX.
• El desarrollo de videojuegos para sistemas PalmOS se realiza usando dos tipos de tecnología. Por un lado, Palm compró la licencia de la máquina virtual de Java implementada por IBM para poder implementar aplicaciones usando la API Java ME. También nos proporciona un compilador de C++ y un entorno de trabajo (codewarriors) que debe de comprarse aparte. Palm está preparando una implementación de la librería OpenGL/ES (embedded system) para su nuevo sistema operativo Palm OS Cobalt y permitirá crear videojuegos 3D para este tipo de dispositivos.
• El desarrollo de juegos para la plataforma iOS de Apple se realiza mediante el conjunto de librerías incorporadas en el iOS SDK. Las aplicaciones que utilizan este SDK se programan principalmente utilizando el lenguaje Objective-C, una versión extendida de C que incorpora elementos de SmallTalk (aunque también se puede programar gran parte del código utilizando C++ y posteriormente enlazarlo con Objective-C). La parte gráfica del SDK se realiza a través de la API Open GL ES versión 2.0, lo que permite crear videojuegos 3D con una calidad gráfica bastante elevada.
• Para dispositivos Android se pueden programar los juegos mediante dos API diferentes. La primera es utilizando el propio SDK de Android, el cual se programa usando Java y permite crear programas que se ejecutan encima de la máquina virtual que lleva el sistema operativo (conocida como Dalvik). Para obtener un rendimiento superior se pueden crear aplicaciones que utilicen el Android NDK, que se programa en C/C++ y permite generar programas en código nativo que no se ejecutan encima de la máquina virtual. En ambos casos la parte gráfica está basada en la programación de la API Open GL ES 2.0.
• En el caso de los teléfonos móviles, se utilizan varias API. En el mercado occidental básicamente se utiliza Java ME y en los mercados asiáticos y americanos Brew o DoJa.
Jordi Duch Gavaldá & Heliodoro Tejedor Navarro, “Introducción a los videojuegos”, Ed. Universitat Oberta de Catalunya, p. 75 – 77.
Comentarios
Publicar un comentario