You are on page 1of 237

GAME MAKER

Usando Game Maker

Esta seccin describe el uso bsico de Game Maker. Explica la idea global detrs del programa, cmo aadir sprites, fondos y sonidos y cmo definir objetos con eventos y acciones y aadirlos a los cuartos. En esta seccin se cubren los siguientes temas: Introduccin Instalacin Registro La idea global Un ejemplo sencillo La interfaz global de usuario Definiendo los sprites Sonidos y msica Fondos Definiendo objetos Eventos Acciones Creando rooms Distribuyendo tu juego

Usando Game Maker

As que quieres crear tus propios videojuegos


Jugar juegos de computadora es divertido. Pero es ms divertido disear tus propios juegos y que otros los jueguen. Desafortunadamente, no es fcil crear videojuegos para computadora. Los juegos comerciales de hoy en da normalmente se llevan de uno a tres aos de desarrollo con equipos de entre 10 a 50 personas. Sus presupuestos alcanzan fcilmente millones de dlares. Y todas estas personas tienen bastante experiencia: programadores, diseadores de arte, tcnicos de sonido, etc.

Quiere decir que es imposible crear tus propios juegos para computadora? Afortunadamente no. Por supuesto que no debes esperar que puedas crear tu propio Quake o Age of Empires en unas cuantas semanas. Pero tampoco es necesario. Juegos ms simples, como Tetris, Pacman, Space Invaders, etc., tambin son divertidos y son mucho ms fciles de crear. Desafortunadamente an requieren de buenas habilidades de programacin para manejar los grficos, sonidos, la interaccin con el usuario, etc. Es aqu donde aparece el Game Maker. El Game Maker ha sido creado para hacer mucho ms sencilla la creacin de ese tipo de juegos. Sin ninguna necesidad de programar. Una sencilla e intuitiva interfaz de arrastrar y soltar te permite crear tus propios juegos rpidamente. Puedes importar y crear imgenes, sprites (imgenes animadas), sonidos y usarlos. T defines fcilmente los objetos en tu juego e indicas su comportamiento. Puedes definir niveles atractivos con fondos deslizables en donde tome lugar el juego. Y si quieres control total sobre el juego existe un sencillo lenguaje de programacin dentro del Game Maker que te pone al mando de todo lo que sucede en el juego.

El Game Maker se enfoca a juegos bidimensionales. As que nada de mundos 3D como en Quake, aunque Game Maker incluye una funcionalidad reducida para grficos en 3D. Pero no te desanimes. Muchos juegos importantes, como Age of Empires, las series Command and Conquer y Diablo usan tecnologa de sprites bidimensionales, aunque parecen tridimensionales. Y disear juegos bidimensionales es mucho ms fcil y rpido. Probablemente la mejor parte es que el Game Maker puede usarse libre de cargo. Y no hay ninguna restriccin en los juegos que creas con l. Ninguna pantalla de publicidad, e incluso puedes venderlos si as lo deseas. Chequea el acuerdo de licencia adjunto para ms detalles.

Este documento te dir todo lo que necesitas saber acerca del Game Maker y cmo puedes crear tus propios juegos con l. Por favor entiende que, incluso con un programa como Game Maker, el diseo de juegos para computadora no es completamente trivial. Hay muchsimos aspectos que son importantes: el game play, los grficos, los sonidos, la interaccin con el usuario, etc. Comienza con ejemplos fciles y te dars cuenta de que crear juegos es bastante divertido. Tambin chequea los sitios Web: http://www.gamemaker.nl http://www.zonamakers.com http://www.comunidadgm.com

Instalacin
Probablemente ya lo hiciste pero por si acaso, aqu tienes cmo instalar el Game Maker. Simplemente ejecuta el programa gmaker.exe. Sigue las instrucciones en pantalla. Puedes instalar el programa donde lo desees pero mejor deja las opciones por defecto. Una vez que finalice la instalacin, en el men Inicio encontrars un nuevo grupo de programas

desde el que puedes ejecutar el Game Maker y leer la documentacin. Adems del programa Game Maker tambin se instala la documentacin, junto con el archivo de ayuda.

La primera vez que ejecutes el Game Maker se te preguntar si quieres ejecutarlo en modo Simple o Advanced (avanzado). Si no has empleado un programa de creacin de videojuegos antes y no tienes experiencia como programador, usa el modo simple (selecciona No) En el modo simple se muestran menos opciones. Puedes cambiar

fcilmente al modo avanzado usando la opcin en el men File.

Dentro de la carpeta de instalacin (por defecto C:\Archivos de Programa\Game_Maker6) tenemos varias carpetas adicionales:

examples: contiene varios juegos de ejemplo, para que los revises y/o modifiques.

lib: contiene varias libreras de acciones. Si deseas instalar libreras adicionales debes colocarlas dentro de esta carpeta.

sprites: esta carpeta est dedicada a contener los sprites que uses. La instalacin incluye algunos sprites, pero en el sitio del Game Maker (http://www.gamemaker.nl), puedes descargar varios paquetes de recursos que contienen sprites, sonidos, y fondos adicionales.

backgrounds, sounds: carpetas similares que contienen las imgenes para los fondos y los sonidos.

Requisitos
El Game Maker requiere una PC moderna con procesador Pentium y sistema operativo Windows 98, NT, 2000, Me, XP o superior. Tarjeta grfica compatible con DirectX 8 con al menos 16 MB de memoria, resolucin de al menos 800x600 y 65000 (16-bit) colores. Tambin se requieres una tarjeta de sonido compatible con DirectX 8.0 o superior y que la versin 8.0 o superior de DirectX est instalada en tu ordenador (Puedes bajar la ltima versin de DirectX del sitio de Microsoft: http://www.microsoft.com/windows/directx/.)

Al desarrollar y testear los juegos los requerimientos de memoria son bastante altos (por lo menos 64 MB y preferentemente ms, dependiendo tambin del sistema operativo). Para ejecutar los juegos los requerimientos son menos severos y dependen del tipo de juego.

Registro
Game Maker se puede usar gratuitamente. Sin embargo, la versin gratuita tiene algunas limitaciones y muestra un logo al cargar el juego. Para disponer de la funcionalidad total del programa, eliminar el logo de carga y contribuir al desarrollo del programa se recomienda encarecidamente que registres tu copia de Game Maker. Al registrar el programa obtendrs las siguientes opciones:

Eliminacin del logo de Game Maker al cargar un juego. Rotacin, color blending y translucidez de sprites. Acciones adicionales para msica desde un CD, rotar texto o formas coloreadas. Efectos especiales de sonido y sonido posicional. Funciones avanzadas de dibujo, como polgonos texturizados. Sistema de partculas para crear efectos de fuego, lluvia, explosiones,... Funciones para grficos en 3D Funciones para crear juegos multi jugador para jugar en red. Funciones para crear y modificar recursos (sprites, backgrounds,...) durante el juego. Funciones para usar estructuras de datos. Funciones para planificacin de movimiento. Posibilidad de extender an ms la funcionalidad de Game Maker usando DLLs.

La cuota de registro del Game Maker es de US $20 o de 15 Euros. Hay varias formas en las que puedes llevar a cabo el registro de tu copia del programa. La ms fcil es usar el registro online usando un sistema de pago seguro con tarjeta de crdito o una cuenta PayPal. Alternativamente puedes realizar una transferencia a nuestra cuenta bancaria, enviarnos una money order o enviar efectivo. Puedes encontrar los detalles en el sitio de registro del Game Maker: www.gamemaker.nl/registration.html

Para registrar tu copia del Game Maker usa el sitio de arriba o selecciona Registration desde el men Help. En la parte inferior de la ventana que aparece haz clic en el botn Registration. Sers llevado a nuestra pgina Web donde se indican las diferentes opciones de registro, incluyendo el registro online.

Una vez que tu registro ha sido recibido se te enviar un email con el nombre, clave y la informacin sobre cmo introducir la clave en el programa. Para introducir la clave, selecciona nuevamente Registration desde el men Help. En la parte inferior de la ventana presiona el botn Enter Key. Introduce el nombre y la clave, y presiona OK. Si seguiste estos pasos correctamente el programa ya estar registrado.

Si posees una copia registrada de la versin 5 de Game Maker en tu ordenador puedes cambiar tu clave por otra vlida para la versin 6. Para ello selecciona Registration desde el men Help. A la izquierda del formulario vers el botn Convert a Version 5 Key (si no aparece es que no posees una versin registrada de GM o es que ya has registrado tu versin 6) Un texto explicativo te orientar para convertir tu clave: lee las instrucciones cuidadosamente y pulsa el botn

La idea global
Antes de ahondar en las posibilidades del Game Maker, sera bueno tener una idea general acerca del programa. Los juegos creados con el Game Maker se llevan a cabo en una o ms habitaciones (rooms). (Las habitaciones son planas, no 3D, pero pueden contener imgenes con apariencia 3D). En estas habitaciones es donde colocas los objetos, los cuales puedes definir en el programa. Los objetos tpicos son las paredes, objetos mviles, el personaje principal, enemigos, etc. Algunos objetos, como las paredes, slo se encuentran ah y no realizan ninguna accin. Otros, como el personaje principal, se movern y reaccionarn a los comandos del jugador (teclado, ratn, joystick). Por ejemplo, cuando el personaje principal toca un enemigo podra ser eliminado. Los objetos son los ingredientes ms importantes de los juegos creados con el Game Maker, por lo que hablaremos un poco ms sobre ellos.

Primero que nada, la mayora de los objetos necesitan alguna imagen para hacerse visibles en la pantalla. Tales imgenes son llamadas sprites. Un sprite no siempre es una sola imagen sino una serie de ellas que se muestran una tras otra para crear una animacin. De esta forma parece que el personaje camina, que una pelota rueda, que una nave explota, etc. Durante el juego el sprite de un objeto en particular puede cambiar. (As el personaje puede lucir diferente cuando camina a la izquierda o a la derecha). Puedes crear tus propios sprites en el Game Maker o cargarlos de algn archivo (GIFs animados por ejemplo).

A los objetos les pueden ocurrir ciertas cosas. A estas cosas se les llama eventos. Los objetos pueden realizar ciertas acciones dependiendo del evento que ocurra. Hay una gran cantidad de eventos que pueden suceder y una gran cantidad de acciones diferentes que los objetos pueden realizar. Por ejemplo, hay un evento creacin cuando el objeto es creado. (Para ser ms precisos, cuando una instancia de un objeto es creada; puede haber mltiples instancias del mismo objeto). Por ejemplo, cuando un objeto pelota se crea, puedes darle alguna accin de movimiento para que empiece a moverse. Cuando dos objetos se encuentran se tiene el evento colisin. En tal caso puedes hacer que la pelota se detenga o que invierta su direccin. Puedes tambin reproducir un efecto de sonido. Para este propsito el Game Maker te permite definir sonidos. Cuando el jugador presiona una tecla en el teclado hay un evento teclado, y el objeto puede realizar la accin apropiada, como moverse en la direccin indicada. Espero que entiendas la idea. Para cada objeto que disees puedes indicarle acciones para varios eventos, de esta forma se define el comportamiento del objeto.

Una vez que has definido tus objetos es tiempo de definir las habitaciones en donde habitarn. Las habitaciones pueden ser empleadas como niveles en el juego o para mostrar diferentes lugares. Hay acciones para moverse de una habitacin a otra. Las habitaciones deben tener primero un fondo. Este puede ser un simple color de relleno o una imagen. Tales imgenes pueden ser creadas en el Game Maker o puedes cargarlas de algn archivo. (El fondo puede hacer muchas cosas pero por el momento, solo considralo como algo que hace que los niveles se vean bien). Ahora puedes colocar tus objetos en la habitacin. Puedes colocar mltiples instancias del mismo objeto en una habitacin. As, por ejemplo, necesitas definir slo un objeto de pared y usarlo en muchos lugares. Tambin puedes tener mltiples instancias de los mismos enemigos, mientras requieran del mismo comportamiento.

Ahora ests listo para ejecutar el juego. Se mostrar la primera habitacin y los objetos en ella tomarn vida por las acciones en sus eventos de creacin. Empezarn a interactuar unos con otros debido a las acciones en sus eventos de colisin y pueden reaccionar a lo que haga el jugador usando las acciones en los eventos del teclado o del ratn. En resumen, los siguientes elementos (comnmente llamados recursos) tienen un papel crucial en el juego: Objetos (objects): que son las entidades verdaderas en el juego. Habitaciones (rooms): los lugares (niveles) en donde habitan los objetos. Sprites: imgenes (animadas) que se emplean para representar a los objetos. Sonidos (sounds): para emplearse en el juego, ya sea como msica de fondo o como efectos. Fondos (backgrounds): las imgenes usadas como fondo para los cuartos.

De hecho, hay otro tipo de recursos: paths, scripts, fuentes y time lines. Estos recursos son importantes para juegos ms complicados. Solo los vers cuando ejecutas el Game Maker en modo avanzado. Se hablar de ellos ms tarde en los captulos avanzados de este documento.

Un ejemplo sencillo
Sera bueno echar un vistazo de cmo crear un ejemplo muy simple. El primer paso es describir el juego que queremos hacer. (Siempre debieras empezar por esto; te ahorrar mucho trabajo despus). El juego ser muy simple: hay una pelota rebotando entre varias paredes. El jugador debe intentar hacer clic en la pelota con el ratn. Cada vez que lo logre obtiene un punto.

Como se puede ver, se requieren dos objetos diferentes: la pelota y la pared. Tambin necesitaremos dos sprites diferentes: uno para el objeto pared y otro para el objeto pelota. Finalmente, queremos escuchar algn sonido cuando se logre hacer clic en la pelota con el ratn. Usaremos un slo nivel en el que se lleve a cabo el juego. (Si no quieres hacer el juego t mismo, puedes cargarlo de la carpeta Examples con el nombre hit the ball.gm6)

Hagamos primero los sprites. Del men Add selecciona Add Sprite (puedes tambin usar el botn apropiado en la barra de herramientas). Aparecer una ventana. En el campo Name escribe wall. Selecciona el botn Load Sprite y elige una imagen apropiada (puedes encontrar una en la carpeta maze). Eso es todo, puedes cerrar la ventana. De esta misma forma, crea un sprite para la pelota.

Ahora definiremos el sonido. Del men Add selecciona Add Sound. Aparece una ventana diferente. Dale un nombre al sonido y selecciona Load Sound. Selecciona algo apropiado y checa si es un buen sonido presionando el botn reproducir. Si te gusta, cierra la ventana.

El siguiente paso es crear los dos objetos. Hagamos primero la pared. Nuevamente del men Add selecciona Add Object. Se abrir una ventana que se ve bastante ms compleja que las que hemos visto hasta ahora. A la izquierda tenemos informacin global acerca del objeto. Dale al objeto un nombre apropiado y del men desplegable selecciona el sprite wall. Como una pared es slida deberas marcar la casilla llamada Solid. Eso es todo por el momento. Nuevamente crea un objeto, llmalo ball, y seleccinale un sprite. No haremos slida a la pelota. Necesitamos definir algn comportamiento para la pelota. Debajo hay un botn marcado Add Event. Presinalo y vers todos los eventos posibles. Selecciona el evento de creacin (create). Ahora se ha agregado a la lista de eventos. En el extremo derecho puedes ver todas las acciones posibles, en varios grupos. Del grupo move selecciona la accin con las 8 flechas rojas y arrstrala a la lista de acciones en el medio. Esta accin har al objeto moverse en una direccin particular. Una vez que la sueltes en la lista de acciones se mostrar un dilogo en el cual puedes indicar la direccin de movimiento. Selecciona las 8 flechas para seleccionar una direccin al azar. Cierra el dilogo. Ahora la pelota empezar a moverse en el momento en que sea creada. En segundo lugar debemos definir lo que suceder en caso de que se colisione con la pared. De nuevo presiona Add Event. Haz clic en el botn de los eventos de colisin (collision) y del men que aparece selecciona el objeto wall. Para este evento necesitamos la accin rebotar. (Puedes ver lo que cada accin hace colocando el ratn sobre el icono que la representa). Finalmente necesitamos definir lo que se har cuando el usuario presione el botn izquierdo del ratn sobre la pelota. Agrega el evento correspondiente y selecciona el botn izquierdo del ratn (Left button) del men que se despliega. Para este evento necesitamos unas cuantas acciones: una para reproducir un sonido (la puedes encontrar en el grupo de acciones main1), una para cambiar el marcador (se encuentra en el grupo score) y dos ms para mover la pelota a una posicin aleatoria y moverla

en una nueva direccin (de la misma forma que en el evento de creacin). Para la accin de sonido, selecciona el sonido adecuado. Para la accin del marcador (score), introduce un valor de 1 y marca la opcinRelative. Esto significa que se agregar 1 al marcador actual. (Si cometes algn error puedes hacer doble click sobre la accin para modificar su configuracin).

Nuestros objetos ahora estn listos. Lo que queda es definir la habitacin. Agrega un nuevo nivel al juego, de nuevo desde el men Add. A la derecha vers la habitacin vaca. A la izquierda vers algunas propiedades que puedes modificar, como el ancho y alto de la habitacin. En la parte inferior izquierda puedes seleccionar un objeto del men desplegable. Puedes colocar instancias de ese objeto haciendo clic en el cuarto. Puedes eliminar las instancias usando el botn derecho del ratn. Crea un espacio cerrado alrededor del nivel usando el objeto wall. Finalmente coloca 1 2 objetos ball en el nivel. Nuestro juego est listo.

Es hora de probar nuestro juego. Presiona el botn Run y ve lo que pasa. Si no cometiste algn error la pelota empieza a moverse alrededor. Intenta hacer click en ella con el ratn y ve qu sucede. Puedes detener el juego presionando la tecla <Esc>. Ahora puedes hacer ms cambios. Felicidades. Has creado tu primer juego. Pero creo que es hora de aprender un poco ms sobre el Game Maker.

La interfaz global de usuario

Al iniciar el Game Maker se muestra la siguiente ventana:

(De hecho, esto es lo que ves cuando ejecutas el Game Maker en modo simple. En el modo avanzado se muestran algunas opciones ms. Ve el captulo correspondiente para ms detalles). A la izquierda puedes ver los diferentes recursos, mencionados antes: Sprites, Sounds (Sonidos), Backgrounds (Fondos), Scripts, Objects (Objetos), Rooms (Habitaciones) y dos ms: Game Information (Informacin del juego) y Game Options (Opciones del juego) En la parte superior est el ya conocido men y la barra de herramientas. En este captulo describir brevemente las diferentes opciones del men, los botones, etc. En captulos posteriores trataremos varios de ellos con ms detalle. Recuerda que muchas cosas se pueden lograr de diferentes maneras: seleccionando un comando del men, haciendo click en un botn, o haciendo click derecho sobre un recurso.

Men file
En el men file puedes encontrar los comandos usuales para cargar y guardar archivos, adems de algunos especiales:

New. Selecciona este comando para empezar a crear un juego nuevo. Si el juego actual sufri modificaciones se te pregunta si

quieres guardarlo. Tambin hay un botn en la barra de herramientas para hacer esto.

Open. Abre un archivo de juego. Los archivos del Game Maker tienen la

extensin .gmd. Hay un botn en la barra de herramientas para este comando. Puedes tambin abrir un juego arrastrando el archivo a la ventana del Game Maker.

Recent Files. Usa este submen para reabrir los archivos abiertos recientemente.

Save. Guarda el archivo de diseo del juego con el nombre actual. Si no se haba especificado un nombre, se te pide dar uno. Puedes usar este comando solo cuando el archivo ha cambiado. Como con los anteriores, hay un botn en la barra de herramientas para realizar esta accin.

Save As. Guarda el diseo del juego con otro nombre. Se te pide un nuevo nombre.

Create Executable. Una vez que tu juego est listo probablemente querrs distribuirlo. Mediante este comando puedes crear una versin ejecutable de tu juego. Es simplemente un ejecutable que puedes darle a otros para que jueguen tu juego. Encontrars ms informacin sobre la distribucin de juegos en el tema correspondiente.

Advanced Mode. Al hacer clic en este comando el Game Maker cambiar entre los modos simple y avanzado. En el modo avanzado se tienen disponibles comandos y recursos adicionales.

Exit. Probablemente obvio. Presinalo para cerrar el Game Maker. Si hiciste cambios al juego actual se te preguntar si quieres guardarlo.

Men Edit
El men edit contiene varios comandos que se relacionan con el recurso seleccionado (objeto, sonido, etc.) o grupo de recursos. Dependiendo del tipo de recurso algunos de los comandos pueden no estar disponibles.

Insert resource. Inserta una nueva instancia del tipo de recurso actualmente seleccionado, se inserta antes del mismo. (Si seleccionaste un grupo de recursos el recurso es agregado al grupo). Se abrir un cuadro de dilogo en el que puedes cambiar las propiedades del recurso. Esto se tratar con ms detalle en los captulos siguientes.

Duplicate. Crea y agrega una copia del recurso actual. Se abre una ventana en la que puedes modificar el recurso.

Delete. Borra el recurso seleccionado (o grupo de recursos). Ten cuidado. No puede deshacerse. Por lo que se te har una advertencia.

Rename. Dale un nuevo nombre al recurso. Esto se puede hacer tambin en la ventana de propiedades del recurso. Tambin puedes seleccionar el recurso y entonces hacer clic en el nombre.

Properties. Usa este comando para mostrar la ventana de edicin de propiedades. Nota que todas las ventanas de propiedades se muestran en la ventana principal. Puedes editar muchas de ellas al mismo tiempo. Puedes tambin editar las propiedades haciendo doble clic en el recurso.

Observa que estos comandos puedes tambin aplicarse de otra forma. Haz clic derecho en un recurso o en un grupo de recursos, y aparecer el men apropiado.

Men Add
En este men puedes agregar un nuevo recurso de cada uno de los diferentes tipos que hay. Nota que para cada uno de ellos hay tambin un botn en la barra de herramientas y un acceso directo con el teclado.

Men Run
Este men se usa para ejecutar el juego. Hay dos formas de ejecutar el juego:

Run normally. Ejecuta el juego en modo normal. El juego se ejecuta de la manera ms eficiente posible exactamente como si fuera un ejecutable.

Run in Debug mode. Ejecuta el juego en modo debug. En este modo puedes revisar ciertos aspectos del juego, pausarlo o avanzar paso a paso. Muy til para detectar y solucionar errores.

Una vez que tu juego est listo, puedes crear un ejecutable del juego usando la accin del men file.

Men Window
En este men puedes encontrar los comandos comunes para manejar las diferentes propiedades de las ventanas de la ventana principal:

Cascade. Coloca todas las ventanas en cascada de forma que cada una sea parcialmente visible.

Arrange Icons. Ordena todas las ventanas. (til en particular cuando cambias de tamao la ventana principal).

Close All. Cierra todas las ventanas de propiedades, preguntando si se desea guardar o no los cambios realizados.

Men Help
Aqu encontrars algunos comandos de ayuda:

Contents. Te permite acceder a la versin en formato de ayuda de este documento.

How to use help. En caso de que no sepas, algo de ayuda sobre cmo usar la ayuda.

Registration. An cuando el Game Maker puede ser usado libre de cargo, se te alienta a registrar el programa. De esta forma se eliminar la ventana publicitaria que en ocasiones aparece en la ventana de edicin y ayudars al futuro desarrollo del programa. Aqu puedes encontrar informacin sobre cmo registrar el programa. Si ya lo registraste puedes usar esta opcin para introducir la clave de registro que recibiste.

Web site. Te conecta al sitio del Game Maker en donde puedes encontrar informacin sobre la versin ms reciente del Game Maker y colecciones de juegos y recursos para el Game Maker. Te recomiendo que visites el sitio al menos una vez al mes para ver nueva informacin.

About Game Maker. Breve informacin sobre esta versin del Game Maker.

El explorador de recursos
En la parte izquierda de la forma principal encontrars el explorador de recursos. Aqu tienes una lista ramificada de todos los recursos de tu juego. Trabaja de la misma forma que el explorador de Windows con el cual muy probablemente ya ests familiarizado. Si un elemento tiene un signo + a su lado puedes hacer clic en el signo para ver los recursos

dentro de l. Haciendo clic en el signo los oculta nuevamente. Puedes cambiar el nombre de un recurso (excepto los de ms alto nivel) seleccionndolo (con un solo click) y luego haciendo clic en el nombre. Haz doble clic en un recurso para editar sus propiedades. Usa el botn derecho del ratn para acceder a los comandos del men Edit.

Puedes cambiar el orden de los recursos haciendo click en ellos y manteniendo presionado el botn del ratn. Ahora arrastra el recurso (o grupo) al lugar apropiado. (Por supuesto que el lugar debe ser el apropiado. Por ejemplo no puedes arrastrar un sonido a la lista de sprites).

Definiendo los sprites

Los sprites son las representaciones visuales de todos los objetos en el juego. Un sprite es o una imagen simple, dibujada con cualquier programa que te guste, o un juego de varias imgenes que, pueden ser reproducidas una tras otra, creando un efecto de movimiento (animacin). Por ejemplo, las siguientes cuatro imgenes forman un sprite para un Pacman movindose hacia la derecha.

Cuando haces un juego empiezas por reunir los distintos sprites para los objetos en tu juego. Con el Game Maker viene incluida una coleccin de sprites estticos y animados. Puedes encontrar otros sprites en Internet, normalmente como archivos gif animados. Para agregar un sprite, selecciona el comando Add Sprite del men Add, o usa el botn correspondiente de la barra de herramientas. Aparecer la siguiente ventana:

En la parte superior puedes indicar el nombre del sprite. Todos los sprites (y todos los dems recursos) tienen un nombre. Ser mejor que le des a cada sprite un nombre descriptivo y fcil de recordar. Asegrate de que todos los recursos tengan diferentes nombres. Aunque no es estrictamente requerido, se recomienda firmemente usar slo letras, dgitos y el guin bajo (_) en el nombre de un sprite (y de cualquier otro recurso) y empezar el nombre con una letra. En particular no hagas uso de espacios en los nombres. Esto pasar a ser parte importante una vez que empieces a usar cdigo.

Para cargar un sprite, haz clic en el botn Load Sprite. Se muestra un dilogo de archivo en el que debes indicar el sprite. El Game Maker puede abrir varios tipos de archivos de imagen. Cuando cargas un gif animado, las diferentes subimgenes forman las imgenes del sprite. Una vez que el sprite es cargado, se muestra la primera subimagen a la derecha. Cuando hay mltiples subimgenes, puedes verlas usando los botones con las flechas.

La opcin Transparent indica si el fondo deber ser considerado como transparente. La mayora de los sprites son transparentes. El fondo es determinado por el color del pxel que se encuentra en la esquina inferior izquierda de la imagen. As que asegrate de que ningn pxel de la imagen que se mostrar tenga este color. (Los archivos gif a menudo definen su color de transparencia, este color no es usado en el Game Maker).

Con el botn Edit Sprite puedes editar el sprite, o incluso crear un sprite completamente nuevo.

Msica y sonido

La mayora de los juegos tienen ciertos efectos de sonido y msica de fondo. El Game Maker incluye algunos efectos de sonido de utilidad. Puedes encontrar muchos ms en la Web.

Para agregar un recurso de sonido a tu juego, usa el comando Add Sound en el men Add o usa el botn correspondiente en la barra de herramientas. Aparecer la siguiente Ventana:

Para cargar un sonido, presiona el botn Load Sound. Aparece un dilogo de seleccin de archivo en el que debes especificar el archivo de sonido. Hay dos tipos de archivos de sonido, archivos wave (*.wav) y archivos midi (*.mid). (Para informacin sobre archivos mp3 ve el Captulo 17). Los archivos wave son usados para efectos breves de sonido. Usan mucha memoria pero se reproducen instantneamente. salos para todos los efectos de sonido en el juego. Los archivos midi tratan la msica en una forma diferente. Como resultado usan mucha menos memoria, pero estn limitados a msica instrumental de fondo. Adems, slo se puede reproducir un archivo midi a la vez.

Una vez que cargues un archivo se muestra su tipo y duracin. Puedes escuchar el sonido usando el botn reproducir. Tambin hay un botn Save Sound para guardar en un archivo el sonido actual. Este botn no es realmente requerido pero pudieras necesitarlo si perdieras el sonido original.

Fondos

El tercer tipo de recursos bsicos son los fondos. Los fondos son normalmente imgenes grandes usadas como fondo para los niveles en los que se realiza el juego. A menudo las imgenes de fondo son hechas con tiles (mosaicos) de manera que pueden formar una imagen en un rea sin errores visuales. De esta manera puedes llenar el fondo con un patrn. Varios tiles de fondo de este tipo vienen incluidos con el Game Maker. Puedes encontrar muchos ms en la Web.

Para agregar un fondo a tu juego, usa el comando Add Background en el men Add o usa el botn correspondiente de la barra de herramientas. Aparecer la siguiente ventana

Presiona el botn Load Background para cargar una imagen de fondo. El Game Maker soporta varios formatos de imagen. Las imgenes de fondo no pueden ser animadas! La opcin Transparent indica si el fondo ser parcialmente transparente. La mayora de los fondos no son transparentes, por lo que la opcin por defecto es no. Como color transparente se usa el color del pxel en la esquina inferior izquierda.

Puedes cambiar el fondo o crear uno nuevo usando el botn Edit Background. Para ms informacin, ve el Captulo 18

Definiendo objetos

Hemos agregado imgenes y sonidos al juego, pero ninguno de ellos realiza ninguna accin. Ahora llegamos al recurso ms importante dentro del Game Maker: los objetos. Los objetos son las entidades que hacen las cosas en el juego. La mayora de las veces tienen un sprite como representacin grfica para que puedas verlos. Tienen un comportamiento porque pueden reaccionar a ciertos eventos. Todas las cosas que ves en el juego (excepto el fondo) son objetos. (O para ser ms precisos, son instancias de objetos). Los personajes, los enemigos, las pelotas, las paredes, etc. Puede haber tambin ciertos objetos que no ves pero que controlan ciertos aspectos del juego.

Por favor nota la diferencia entre los sprites y los objetos. Los sprites son solo imgenes (animadas) que no tienen ningn comportamiento. Los objetos normalmente tienen un sprite que los representa pero tambin tienen un comportamiento. Sin objetos no hay juego!

Tambin nota la diferencia entre los objetos y las instancias. Un objeto describe cierta entidad, por ejemplo un enemigo. Puede haber mltiples instancias de este objeto en el juego. Cuando hablamos de instancia nos referimos a una instancia en particular del objeto. Cuando hablamos de un objeto nos referimos a todas las instancias de este objeto.

Para agregar un objeto al juego, selecciona el comando Add Object del men Add. Aparecer la siguiente ventana:

Este formulario es bastante complejo. A la izquierda hay cierta informacin general acerca del objeto. En el medio hay varios eventos posibles que pueden ocurrirle a un objeto. Ve el siguiente captulo para ms detalles. A la derecha hay varias acciones que puede realizar el objeto. Estas sern tratadas en el Captulo 12.

Como siempre, puedes (y debes) agregar un nombre al objeto. Despus puedes indicar el sprite para el objeto. Para hacerlo, haz clic con el botn izquierdo del ratn en la caja de sprite o en el botn de men junto a esta. Aparecer un men con todos los sprites disponibles. Selecciona el que quieras usar para el objeto. Si todava no tienes un sprite para el objeto, puedes hacer click en el botn New para aadir un sprite y cambiarlo. Tambin vers un botn Edit para editar el sprite rpidamente.

Debajo hay dos opciones. La opcin Visible indica si las instancias de este objeto sern visibles. Obviamente, la mayora de los objetos son visibles, pero algunas veces es til tener objetos invisibles. Por ejemplo, puedes usarlos como guas de movimiento para un enemigo. Los objetos invisibles reaccionan a eventos y otras instancias pueden colisionar con ellos. La opcin Solid indica si se trata de un objeto slido

(como una pared). Las colisiones con objetos slidos se tratan de forma distinta a las colisiones con objetos no slidos. Se recomienda usar la opcin Solid nicamente para objetos que no se mueven.

Eventos

El Game Maker emplea lo que se conoce como programacin orientada a eventos. Esto es, en todo tipo de situaciones las instancias de los objetos reciben eventos (como mensajes que indican que algo ha sucedido). Entonces los objetos pueden reaccionar a estos mensajes ejecutando ciertas acciones. Para cada objeto debes indicar a qu eventos responder y qu acciones debe realizar. Puede parecer complicado pero en realidad es bastante sencillo. Primero que nada, para la mayora de los eventos los objetos no tienen que hacer nada. Para los eventos donde algo suceda puedes usar muy simples comandos de arrastrar y soltar para indicar las acciones.

En medio de la ventana de propiedades de objeto hay una lista de los eventos a los cuales el objeto puede reaccionar. Al principio est vaca. Puedes agregar eventos presionando el botn Add Event. Aparecer un pequeo men con todos los diferentes tipos de eventos. Aqu debes seleccionar el evento que deseas agregar. En ocasiones se mostrar un nuevo men con opciones extra. Por ejemplo, para el evento del teclado debes seleccionar la tecla. Ms abajo encontrars una completa lista con descripciones de los eventos. Seleccionaremos un evento de la lista. Este ser el evento que modificaremos. Puedes cambiar el evento seleccionado haciendo clic sobre l. A la derecha estn todas las acciones representadas por pequeos iconos. Se encuentran agrupadas en varias pginas / fichas de opciones. En el siguiente captulo describir todas las acciones y lo que realizan. Entre los eventos y las acciones se encuentra la lista. Esta lista contiene las acciones para el evento actual. Para agregar acciones a la lista, arrstralas desde la derecha a la lista. Sern colocadas una bajo la otra, con una breve descripcin. Para cada accin se te pedirn algunos parmetros. Estos se describirn tambin en el siguiente captulo. Despus de agregar algunas acciones, tendras algo como esto:

Ahora puedes agregar acciones a otro evento. Haz clic con el botn izquierdo del ratn sobre el evento adecuado para seleccionarlo y arrastra la accin a la lista. Puedes cambiar el orden de las acciones en la lista arrastrando los iconos. Si mantienes presionada la tecla <Ctrl> mientras arrastras una accin, crears una copia de dicha accin. Puedes inclusive arrastrar acciones entre diferentes listas de diferentes objetos. Cuando haces clic con el botn derecho sobre una accin, se muestra un men desde el cual puedes eliminar la accin (tambin puedes hacer esto usando la tecla <Supr>), o copiar y pegar acciones. Cuando mantienes el cursor del ratn sobre una accin, se muestra una descripcin ms detallada sobre la misma. En el siguiente captulo hay ms informacin sobre las acciones.

Para eliminar el evento seleccionado y todas sus acciones, presiona el botn Delete. (Los eventos sin acciones son eliminados automticamente cuando cierras la ventana por lo que no hay necesidad de que lo hagas tu mismo). Si deseas asignar las acciones a un evento diferente (porque por ejemplo, has decidido emplear una tecla diferente para las acciones) presiona el botn Change y selecciona el nuevo evento. (El nuevo evento no debe haber sido empleado antes!).

Como se mencion arriba, para agregar un evento, presiona el botn Add Event. Se muestra la siguiente ventana:

Aqu seleccionas el evento que deseas agregar. Algunas veces aparece un men con opciones extra. A continuacin una descripcin de los eventos. (Recuerda que normalmente slo haces uso de algunos de ellos):

Evento

create

Este evento ocurre cuando se crea una instancia del objeto. Normalmente se usa para establecer el movimiento de la instancia y/o establecer ciertas variables de la misma

Evento Destroy Este evento ocurre cuando la instancia es destruida. Para ser precisos, ocurre justo antes de que sea destruida, por lo que la instancia an existe cuando el evento es ejecutado! La mayora de las veces este evento no se usa pero puedes por ejemplo emplearlo para cambiar el marcador o para crear algn otro objeto.

Eventos alarm

Cada instancia tiene 12 relojes de alarma. Puedes configurar estos relojes usando ciertas acciones (ver el siguiente captulo). El reloj de alarma hace una cuenta regresiva hasta que llega a 0, que es cuando se genera el evento de alarma. Para indicar las acciones para un reloj de alarma, necesitas primero seleccionarlo en el men. Los relojes de alarma son muy tiles. Puedes usarlos para hacer que ciertas cosas sucedan de tiempo en tiempo. Por ejemplo un enemigo puede cambiar su direccin de movimiento cada 20 pasos. (En cuyo caso una de las acciones en el evento debe configurar nuevamente la alarma).

Eventos

step

El evento step sucede a cada paso/frame del juego. Aqu puedes colocar acciones que requieren ejecutarse continuamente. Por ejemplo, si el objeto debe seguir a otro, puedes adaptar aqu la direccin de movimiento hacia el objeto que se est siguiendo. Sin embargo ten cuidado con este evento. No coloques muchas acciones muy complicadas en el evento step. Esto podra alentar el juego. Para ser ms preciso, hay tres diferentes eventos step. Normalmente solo necesitas el evento por defecto. Pero usando el men puedes tambin seleccionar el inicio y el final del evento step. El inicio del evento step es ejecutado al inicio de cada paso, antes de que ocurra cualquier otro evento. El evento step normal es ejecutado justo antes de que se coloquen las instancias en sus nuevas posiciones. El final del evento step se ejecuta al final de cada paso, justo antes de que se dibuje la escena. Este evento se usa normalmente para, por ejemplo, cambiar el sprite dependiendo de la direccin actual.

Eventos

de

colisin

En el momento en que dos instancias colisionan (esto es, que sus sprites se sobreponen) ocurre un evento de colisin. Bien, para ser precisos, ocurren dos eventos de colisin, uno por cada instancia. La instancia puede reaccionar a este evento de colisin. Para este fin, selecciona en el men el objeto con el cual quieres definir el evento de colisin. Despus coloca las acciones. Hay una diferencia entre lo que sucede cuando la instancia colisiona con un objeto slido y cuando lo hace con uno no slido. Antes que nada, cuando no hay acciones en el evento de colisin, no sucede nada. La instancia actual simplemente contina movindose; an cuando el otro objeto sea slido. Cuando el evento de colisin contiene acciones sucede lo siguiente: Cuando el otro objeto es slido, la instancia se coloca de vuelta al lugar previo (antes de que ocurriera la colisin). Entonces se ejecuta el evento. Finalmente, la instancia es llevada a su nueva posicin. As que si por ejemplo, el evento invierte la direccin de movimiento, la instancia rebota contra la pared sin detenerse. Si hay una nueva colisin, la instancia se mantiene en su lugar previo. De manera que efectivamente deje de moverse. Cuando el otro objeto no es slido, la instancia no se regresa. El evento simplemente se ejecuta con la instancia en su posicin actual. Tampoco se checa una nueva colisin. Si lo piensas, esto es lo que debera ocurrir lgicamente. Porque cuando el objeto no es slido, podemos simplemente movernos sobre l, o a travs de l. El evento nos notifica lo que est sucediendo. Existen muchos usos para el evento de colisin. Las instancias pueden usarlo para rebotar contra las paredes. Puedes usarlo para destruir algn objeto cuando es tocado por una bala, etc.

Eventos

Keyboard

Cuando el usuario presiona una tecla, ocurre un evento keyboard para todas las instancias de todos los objetos. Hay un evento diferente para cada tecla. En el men puedes seleccionar la tecla para la que quieres definir el evento de teclado y despus arrastrar las acciones. Es claro que solo unos cuantos objetos necesitan eventos para unas cuantas teclas. Se tiene un evento en cada paso cuando el jugador presiona la tecla. Hay dos eventos de teclado especiales. Uno es el <No key>. Este evento ocurre en cada paso cuando no hay ninguna tecla presionada. El segundo se llama <Any key> y ocurre cuando se presiona cualquier tecla. A propsito, cuando el usuario presiona varias teclas, ocurren los eventos para todas ellas. Las teclas en el teclado numrico solo producen sus eventos correspondientes cuando <BloqNum> est activada. Eventos mouse

Un evento mouse ocurre para una instancia cuando el cursor del ratn se encuentra sobre el sprite que representa a la instancia. Dependiendo de qu botn se presione, se obtienen los eventos no button (ningn botn), left button (botn izquierdo), right button (botn derecho), o middle button (botn central). Estos eventos son generados en cada paso mientras el jugador mantenga el botn del ratn presionado. Los eventos press se generan una sola vez cuando el botn es presionado. Los eventos release se generan una sola vez cuando se suelta el botn. Recuerda que estos eventos slo ocurren cuando el ratn est sobre la instancia. Si el jugador presiona un botn del ratn en algn lugar donde no haya ninguna instancia, no se genera el evento. Pero en ocasiones es importante reaccionar a cualquier click del ratn. Esto puede conseguirse usando los eventos globales que aparecen en el submen. Tambin hay dos eventos especiales. El evnto

mouse enter ocurre cuando el ratn entra sobre el sprite de la instancia. El evento mouse leave ocurre cuando el ratn deja de estar encima de la instancia. Estos eventos se usan tpicamente para cambiar el sprite o para hacer sonar algn sonido. Los eventos mouse wheel up y mouse wheel down ocurren cuando se usa la rueda del ratn. Por ltimo, hay una serie de eventos para joysticks. Puedes indicar acciones para las cuatro direcciones del joystick (en una direccin diagonal se ejecutan ambos eventos) y para 8 botones del joystick. Puedes hacer esto para dos joysticks.

Eventos Hay otros eventos que pueden ser tiles en ciertos juegos. Los encuentras en este men. Los eventos que puedes encontrar son:

other

Outside: Este evento ocurre cuando la instancia se encuentra completamente fuera del cuarto. Este es normalmente un buen momento para destruirla.

Boundary: Este evento ocurre cuando la instancia llega al borde del cuarto. Game start: Este evento se genera para todas las instancias en el primer cuarto donde inicia el juego. Ocurre antes que el evento room start (ver abajo) y an antes de los eventos create de las instancias en el cuarto. Este evento se define normalmente en un solo objeto controlador y se usa para reproducir alguna msica de fondo y para dar valores iniciales a algunas variables, o para cargar informacin.

Game end: El evento ocurre para todas las instancias cuando termina el juego. De nuevo, es comn que solo un objeto lo defina. Se emplea por ejemplo para guardar cierta informacin en un archivo.

Room start: Este evento se genera para todas las instancias (en el cuarto) cuando se inicia un cuarto. Ocurre antes que los eventos de creacin.

Room end: Este evento se genera para todas las instancias existentes cuando finaliza el cuarto. No more lives: El Game Maker tiene un sistema de vidas interno. Hay una accin para especificar y cambiar el nmero de vidas. En el momento que el nmero de vidas sea menor o igual a 0, se genera este evento. Normalmente empleado para terminar o reiniciar el juego.

No more health: El Game Maker tiene un sistema interno de energa. Hay una accin para especificar y cambiar el nivel de energa. En el momento que la energa sea menor o igual a 0, ocurre este evento. Normalmente se emplea para disminuir el nmero de vidas o para reiniciar el juego.

End of animation: Como se indic antes, una animacin consiste en varias imgenes que se muestran una despus de otra. Despus de que se muestra la ltima se inicia nuevamente con la primera. El evento ocurre en ese preciso momento. Esto se puede usar para por ejemplo cambiar la animacin, o destruir la instancia.

End of path: Este evento ocurre cuando la instancia que sigue una trayectoria predeterminada (path) llega al final de la misma. Ve al Captulo 18 para encontrar ms informacin sobre las trayectorias.

User defined: Hay 16 de estos eventos. Normalmente nunca ocurren a menos que t mismo los llames desde alguna pieza de cdigo.

Evento

Drawing

Las instancias, cuando son visibles, dibujan su sprite en la pantalla en cada paso. Cuando especificas acciones en el evento de dibujo, no se

dibuja el sprite, sino que se ejecutan estas acciones en su lugar. Esto se puede usar para dibujar algo ms que un sprite, o para primero hacer algunos cambios a los parmetros del sprite. Hay varias acciones de dibujo especialmente diseadas para usarse en el evento drawing. Recuerda que el evento drawing se ejecuta solamente cuando el objeto es visible. Tambin recuerda que, independientemente de lo que dibujes aqu, los eventos de colisin se basan en el sprite que est asociado a la instancia

Evento

Key

press

Este evento es similar al evento keyboard con la diferencia de que ste ocurre solo una vez cuando se presiona la tecla, y no continuamente. Este es til cuando deseas que una accin ocurra solo una vez.

Key

release

events

Este evento es similar al evento keyboard, pero ocurre solo una vez cuando la tecla es liberada, en lugar de ocurrir continuamente.

En algunas situaciones es importante conocer el orden en el cual el Game Maker procesa los eventos. Como sigue. Eventos Begin Step Eventos Alarm Eventos Keyboard, Key press, y Key release Eventos Mouse Eventos Step normales (ahora todas las instancias son colocadas en sus nuevas posiciones) Eventos Collision Eventos End Step Eventos Drawing

Los eventos de creacin (create), destruir (destroy) y otros son generados en el momento pertinente.

Acciones
Las acciones indican lo que sucede en un juego creado con el Game Maker. Las acciones se colocan en los eventos de los objetos. Cuando el evento ocurre estas acciones se llevan a cabo, resultando en cierto comportamiento para las instancias del objeto. Hay una gran cantidad de

acciones disponibles y es importante que entiendas lo que hacen. En este captulo describir las acciones disponibles en modo simple. Nota: ciertas cantidad de acciones slo estan disponible en la versin registrada de Game Maker. Estas sern indicadas.

Todas las acciones se encuentran en las pginas / fichas(pestaas) a la derecha de la ventana de propiedades de objeto. Hay siete grupos de acciones. Puedes ver el grupo haciendo clic en la ficha correcta. Cuando mantienes el ratn sobre una de las acciones, se muestra una breve descripcin para recordar su funcin.

Permteme repetir brevemente: Para colocar una accin en un evento, solo arrstrala de las pginas / fichas a la lista de accin. Puedes cambiar el orden de la lista, arrastrando y soltando los iconos. Si presionas la tecla <Ctrl> mientras arrastras puedes hacer una copia de la accin. (Puedes arrastrar y copiar acciones entre las listas en diferentes ventanas de propiedades de objetos). Usa el botn derecho del ratn para borrar acciones (o usa la tecla <Supr> <Del>) o para copiar y pegar acciones.

Cuando colocas una accin, la mayora de las veces aparece una ventana de dilogo, en la cual puedes especificar ciertos parmetros para la accin. Dos tipos de parmetros aparecen en muchas acciones. En la parte superior puedes indicar a qu instancia aplica la accin. El valor por defecto es self, que es la instancia para la cual se est realizando la accin. La mayora de las veces esto es lo adecuado. En el caso de un evento collision, puedes especificar tambin si se aplica la accin a la otra instancia involucrada en la colisin. De esta forma puedes por ejemplo destruir la otra instancia.

Finalmente, puedes elegir si aplicas la accin a todas las instancias de un objeto. De esta manera puedes por ejemplo cambiar todas las pelotas rojas por azules. El segundo tipo de parmetro es la casilla marcada Relative. Al marcar esta casilla, los valores que introduzcas sern relativos a los valores actuales. Por ejemplo, de esta forma puedes agregar algo al marcador actual, en lugar de cambiar el marcador actual por su nuevo valor. Los otros parmetros se describen abajo. Puedes revisar despus los parmetros haciendo doble clic en la accin.

La informacin sobre las acciones est disponible en los siguientes temas: Acciones de movimiento Acciones principales, grupo 1 Acciones principales, grupo 2 Acciones de control Acciones de score Acciones de dibujo Usando expresiones y variables

Acciones de movimiento
El primer grupo de acciones consiste de aquellas relacionadas al movimiento de objetos. Tenemos las siguientes:

Start moving in a direction Usa esta accin para que la instancia empiece a moverse en una direccin en particular. Puedes indicar la direccin usando las flechas. Usa el botn del medio para detener el movimiento. Tambin debes especificar la velocidad de movimiento. Esta velocidad est dada en pixels por paso. El valor por defecto es de 8. De preferencia no uses valores de velocidad negativos. Puedes especificar mltiples direcciones. En este caso se elige una al azar. De esta forma puedes por ejemplo hacer que un enemigo se mueva hacia la izquierda o hacia la derecha.

Set direction and speed of motion Esta es la segunda forma en la que puedes especificar un movimiento (con las flechas azules). Aqu puedes indicar una direccin con ms precisin. Con un ngulo de entre 0 y 360 grados. 0 significa hacia la derecha. La direccin es contra las manecillas del reloj. As por ejemplo 90 indica la direccin hacia arriba. Si quieres una direccin arbitraria, puedes poner random(360). Como vers ms abajo la funcin random da un nmero al azar menor que el valor indicado. Como podrs haber notado hay una casilla llamada Relative. Si la seleccionas, el nuevo movimiento es sumado al anterior. Por ejemplo, si la instancia se est moviendo hacia arriba y le agregas un pequeo movimiento hacia la izquierda, el nuevo movimiento ser hacia arriba y a la izquierda.

Move towards a point Esta accin da otra manera de especificar un movimiento. Usted indica una posicin y una velocidad y la instancia comienza a moverse con la velocidad seleccionada hacia la posicin establecida (la instancia no se detendr en la posicin!). Por ejemplo, tu quieres que una bala vuele hacia la posicin de una nave espacial (llamada spaceship), puedes usar como posicin spaceship.x, spaceship.y (Aprender ms sobre el uso de variables como stas ms adelante). Si marcas la casillaRelative, puede especificar la posicin relativa para la posicin actual de la instancia. (La velocidad no es tomada como relativa!)

Set the horizontal speed La velocidad de una instancia consiste de una parte horizontal y otra vertical. Con esta accin puedes cambiar la velocidad horizontal. Una velocidad horizontal positiva representa movimiento hacia la derecha. Una negativa movimiento hacia la izquierda. La velocidad vertical permanecer constante. Usa la opcin Relative para incrementar la velocidad horizontal (o disminuirla introduciendo un valor negativo).

Set the vertical speed De manera similar, con esta accin puedes cambiar la velocidad vertical de la instancia

Set the gravity Con esta accin puedes especificar una gravedad para un objeto en particular. Especificas una direccin (un ngulo entre 0 y 360 grados) y una velocidad, y a cada paso esta cantidad de velocidad en la direccin especificada se aumenta al movimiento actual de la instancia del objeto. Normalmente necesitas un muy pequeo incremento de velocidad (como 0.01). Normalmente se emplea una direccin hacia abajo (270 grados). Si seleccionas la casilla Relative incrementas la velocidad de gravedad y la direccin. Nota que, contrario a la vida real, diferentes objetos pueden tener diferentes direcciones de gravedad.

Reverse horizontal direction Con esta accin inviertes el movimiento horizontal de la instancia. Esto lo puedes usar por ejemplo cuando el objeto colisiona con una pared vertical.

Reverse vertical direction Con esta accin inviertes el movimiento vertical de la instancia. Esto lo puedes usar por ejemplo cuando el objeto colisiona con una pared horizontal.

Set the friction La friccin disminuye la velocidad de las instancias cuando se mueven. Puedes especificar la cantidad de friccin. En cada paso esta cantidad se resta de la velocidad hasta llegar a 0. Normalmente usas un nmero muy pequeo (como 0.01).

Jump to a given position Usando esta accin puedes colocar una instancia en una posicin en particular. Simplemente especificas las coordenadas x e y, y la instancia es colocada con su punto de referencia en esa posicin. Si la casilla Relative est marcada, la posicin es relativa a la posicin actual de la instancia. Esta accin es usada a menudo para continuamente mover la instancia. En cada pasa incrementaremos la posicin un poco.

Jump to the start position Esta accin coloca la instancia de vuelta a la posicin donde fue creada.

Jump to a random position Esta accin mueve la instancia a una posicin aleatoria cuarto. Solo se usan posiciones en donde la instancia no intercepte ninguna instancia slida. Puedes especificar la rapidez (snap) usada. Si especificas valores positivos, las coordenadas sern elegidas con mltiplos enteros de los valores indicados. Esto puede ser usado por ejemplo para mantener una instancia alineada con las celdas de tu juego (si la hay). Puedes especificar la rapidez horizontal y la vertical por separado.

Snap to grid Con esta accin puedes alinear la posicin de una instancia a una cuadrcula. Puedes indicar los valores horizontal y vertical (esto es, el tamao de las celdas de la cuadrcula). Esto puede ser muy til para asegurarte que las instancias se mantengan en una cuadrcula.

Wrap when moving outside Con esta accin puedes hacer que cuando una instancia salga del room por un lado, aparezca por el lado contrario (teleportacin). Normalmente esta accin se usa en el evento Outside room. Observa que la instancia debe tener una velocidad para que esta accin funcione, porque la direccin en la que reaperece se basa en la direccin de movimiento. Puedes indicar si quieres que la instancia se teleporte slo horizontalmente, slo verticalmente o en ambas direcciones a la vez.

Move to contact position Con esta accin puedes mover la instancia en una direccin dada hasta que se encuentre tocando a otro objeto. Si ya hay colisin en la posicin actual la instancia no se mueve. En caso contrario, la instancia se coloca justo antes de que ocurra una colisin. Puedes especificar la direccin y la mxima distancia que se debe mover la instancia. Por ejemplo, cuando la instancia se est cayendo puedes moverla una distancia mxima hasta que encuentre un objeto. Tambin puedes hacer que se tengan en cuenta slo los objetos slidos o todos. Normalmente esta accin se pone en el evento colisin para asegurarte de que la instancia deje de moverse al chocar con el otro objeto.

Bounce against objects Cuando colocas esta accin en el evento collision de algn objeto, la instancia rebota en este objeto de manera natural. Si configuras el parmetro precise como falso, slo las paredes horizontales y verticales se tratan correctamente. Cuando configuras precise a verdadero tambin se tratan las paredes inclinadas (y an las curvadas) de manera correcta. Sin embargo esto es ms lento. Tambin puedes indicar si el objeto rebotar solo contra objetos slidos o contra todos los objetos. Por favor nota que el rebote no es completamente correcto porque depende de muchas propiedades. Pero en muchas situaciones el efecto es lo suficientemente bueno

Acciones principales, grupo 1


El siguiente grupo de acciones est relacionado con la creacin, el cambio y la destruccin de las instancias de objetos.

Create an instance of an object Con esta accin puedes crear una instancia de un objeto. Debes especificar el objeto a crear y la posicin para la nueva instancia. Si marcas la casilla Relative, la posicin es relativa a la posicin de la instancia actual. La creacin de instancias durante el juego es muy til. Una nave crea balas; una bomba puede crear una explosin, etc. En muchos juegos tendrs un objeto de control que cada cierto tiempo crear enemigos u otros objetos. El evento de creacin es ejecutado para la nueva instancia al crearse.

Create an instance of an object with a speed and direction Esta accin es la misma que la anterior pero con dos campos adicionales. Puedes especificar la velocidad y direccin de la instancia que se crear. Si usas la opcin Relative slo afectar a la posicin y no a la velocidad ni direccin. Por ejemplo, para hacer que una bala se mueva en la misma direccin que el personaje que la crea usa un pequeo truco: activa la opcin Relative e introduce la posicin 0,0. En el campo de direccin, introduce la palabra

direction, que es la direccin en la que se mueve el personaje que dispara la bala.

Create instance of random object Esta accin te permite crear una instancia de uno de hasta cuatro objetos elegidos aleatoriamente. Especificas los cuatro objetos y la posicin y una instancia de uno de estos objetos se crear en la posicin elegida. Si usas Relative, la posicin ser relativa a la instancia que ejecute la accin. Si no quieres usar 4 objetos, puedes seleccionar No Object para los dems campos. Esta accin se puede usar para crear un enemigo de un tipo aleatorio en una posicin determinada.

Change the instance Con esta accin puedes cambiar la instancia actual por otro objeto. Por ejemplo, puedes cambiar una instancia de una bomba en una

explosin. Todos los parmetros, como el movimiento o los valores de variables, se mantendrn iguales. Puedes indicar si llevar a cabo o no el evento de destruccin para el objeto actual y el evento de creacin para el nuevo.

Destroy the instance Con esta accin destruyes la instancia actual. Esa instancia ejecuta el evento de destruccin de la instancia.

Destroy instances at a position Con esta accin puedes destruir todas las instancias cuya caja lmite contiene una posicin dada. Esto es til por ejemplo cuando empleas la explosin de una bomba. Cuando marcas la casilla Relative, la posicin es relativa a la posicin de la instancia actual.

Change the sprite Usa esta accin para cambiar el sprite de la instancia. Debes indicar un nuevo sprite. Tambin puedes indicar un factor de escalado. Un factor de 1 significa que el sprite no es escalado. El factor de escalado debe ser mayor que 0. Por favor recuerda que el escalado reducir la velocidad del dibujo. El cambio de sprites es una caracterstica importante. Por ejemplo, a menudo querrs cambiar el sprite de un personaje de acuerdo a la direccin a la que se dirige. Esto se puede lograr haciendo diferentes sprites para cada una de las (cuatro) direcciones. En los eventos del teclado para las teclas del cursor estableces la direccin de movimiento y el sprite.

Transform the sprite Usa esta accin para cambiar el tamao y orientacin del sprite de la instancia. Usa los factores de escale para hacer el sprite ms grande o pequeo. El ngulo (angle) indica la orientacin en sentido anti horario del sprite. Por ejemplo, para hacer que el sprite se oriente en la direccin del movimiento usa el valor

direction. Esto es muy til para un juego de coches, por ejemplo. Esta accin slo est

disponible en la funcin registrada.

Set sprite blending Normalmente el sprie se dibuja como se ha definido. Usando esta funcin puedes cambiar el color del sprite. Este color se combina con los colores del sprite Si quieres dibujar un sprite en varios colores debes definir el sprite en blanco y negro y usar el color para definir la nueva apariencia del sprite. Tambin puedes indicar una transparencia (alpha): 0 significa totalmente transparente y 1 totalmente opaco. Con un valor intermedio (Ej.: 0.5) conseguirs que se pueda ver el fondo a travs del sprite. Esto es muy til para explosiones. Esta accin slo est disponible en la funcin registrada.

Play a sound Con esta accin reproduces uno de los recursos de sonido que agregaste al juego. Puedes indicar el sonido a reproducir y si debiera reproducirse solo una vez (el valor por defecto) o hacerlo continuamente Se pueden reproducir varios archivos wave al mismo tiempo, pero slo puede reproducirse un midi a la vez. As que si inicia el sonido de un midi, el midi actual se detiene. A menos que el sonido tenga mltiples buffers slo se puede reproducir una instancia del sonido. Por lo que si el mismo sonido se est reproduciendo, se detiene y vuelve a empezar

Stop a sound Esta accin detiene el sonido indicado. Si hay varias instancias del sonido reproducindose, todas son detenidas.

If a sound is playing Si el sonido indicado est sonando la accin siguiente se ejecuta. Si no, la accin siguiente se ignora. Puedes seleccionar Not para que acte al revs (es decir, si el sonido no est la accin se ejecuta). Por ejemplo, puedes comprobar si est sonando la msica de fondo y si no est sonando, haces que empiece a sonar otra cancin. Esta accin devuelve true cuando el sonido suena por los altavoces. Cuando usas la accin de hacer sonar un sonido tarda un poco hasta que el sonido llega a los altavoces y as que esta accin devolver false durante ese pequeo espacio de tiempo. Cuando detienes un sonido, tampoco se para instantneamente as que la accin tardar un poco en devolver false,

Go to previous room Ir al cuarto anterior. Puedes indicar el tipo de transicin entre los cuartos. Experimenta para que veas cul es el que te agrada. Si ests en el primer cuarto, se da un error.

Go to next room Ir al siguiente cuarto. Puedes indicar la transicin. Si ests en el ltimo cuarto da un error.

Restart the current room Se reinicia el cuarto actual. Puedes indicar el efecto de transicin.

Go to a different room Con esta accin vas a un cuarto en particular. Puedes indicar el cuarto y el efecto de transicin.

If previous room exists Esta accin verifica si existe el cuarto anterior. Si es cierto, se ejecuta la siguiente accin. Normalmente necesitas hacer esta comprobacion antes de moverte al cuarto anterior.

If next room exists Esta accin verifica si existe el siguiente cuarto. Si es cierto, se ejecuta la siguiente accin. Normalmente necesitas hacer esta comprobacion antes de moverte al siguiente cuarto.

Acciones principales, grupo 2


Aqu tenemos algunas acciones ms, relacionadas con el tiempo, mostrar mensajes al usuario, y al juego en conjunto.

Set an alarm clock Con esta accin puedes configurar uno de los doce relojes de alarma para la instancia. Puedes indicar el nmero de pasos y la alarma. Despus del nmero indicado de pasos, la instancia recibir el correspondiente evento de alarma. Tambin puedes incrementar o decrementar el valor marcando la casilla Relative. Si configures la alarma a un valor menor o igual que 0 la desactivas, por lo que no se genera el evento.

Sleep for a while Con esta accin puede congelar la escena por un cierto tiempo. Esto usualmente se usa al inicio de un nivel o cuando le das algn mensaje al jugador. Especificas el nmero de milisegundos a pausar. Tambin indicas si la pantalla debiera ser dibujada primero para mostrar la situacin ms reciente.

Display a message Con esta accin puedes mostrar un mensaje en una ventana de dilogo. Simplemente tecleas el mensaje. Si usas el smbolo # en el texto del mensaje ser interpretado como un carcter de nueva lnea (usa \# para obtener el smbolo #). Si el mensaje empieza con una comilla o dobles comillas, se interpreta como una expresin. Ve el team correspondiente sobre las expresiones.

Show the game information Con esta accin puedes mostrar la ventana de informacin del juego.

Restart the game Con esta accin puedes reiniciar el juego desde el principio.

End the game Con esta accin termina el juego.

Save the game Con esta accin puedes guardar el estado actual del juego. Especificas el nombre del archivo a guardar (el archivo es creado en la carpeta de trabajo del juego). Despus el juego puede ser cargado con la siguiente accin (observa que cosas como el sonido que est sonando, los contenidos de las estructuras de datos, partculas, etcno se cargarn).

Load the game Carga el estado del juego desde un archivo. Aqu especificas el nombre del archivo. Asegrate de que el juego guardado corresponde al mismo juego y que fue creado con la misma versin del Game Maker. De otra manera pudiera haber errores (para ser precisos, el juego se carga en el evento step actual. Por lo que an se realizan algunas acciones despus de esta an son realizadas en el juego actual, no en el cargado!).

Acciones de control
Hay varias acciones con las que puedes controlar qu otras acciones se llevan a cabo. La mayora de estas acciones hacen una pregunta, por ejemplo si es que una posicin est vaca. Cuando la respuesta es yes (true) se ejecuta la siguiente accin, de otra forma se salta esa accin. Si quieres que se ejecuten o salten varias acciones basndote en el resultado puedes colocarlas dentro de un bloque. Tambin puede haber una parte else, la cual se ejecuta cuando la respuesta es no. As, una pregunta normalmente tiene la siguiente estructura:

Aqu se pregunta si una posicin para la instancia actual est libre de colisin. De ser as, la instancia comienza a moverse en una direccin dada. Si no, la instancia es movida a una posicin dada. Para todas las preguntas hay un campo marcado NOT. Si lo marcas, el resultado de la pregunta se invierte. Esto es, si el resultado era verdadero se vuelve falso, y si era falso, se vuelve verdadero. Esto te permite realizar ciertas acciones cuando una pregunta no es verdadera. Para muchas preguntas puedes indicar si deben aplicar a todas las instancias de un objeto en particular. En este caso el resultado es verdadero solo si es verdadero para todas las instancias del objeto. Por ejemplo, puedes checar si para todas las pelotas la posicin ligeramente a la derecha est libre de colisin.

Las siguientes preguntas y acciones relacionadas estn disponibles. (Nota que todas ellas tienen un icono con forma y color de fondo diferentes de manera que puedan ser distinguidos ms fcilmente de otras acciones). If a position is collision free Esta pregunta devuelve verdadero si la instancia actual, colocada en la posicin indicada no provoca una collision con algn objeto. Puedes especificar si la posicin es absoluta o relativa. Puedes tambin indicar si solo los objetos slidos o todos los objetos debieran ser tomados en cuenta. Esta accin es normalmente empleada para checar si la instancia se puede mover a una posicin en particular.

If there is a collision at a position Esta es la inversa de la accin anterior. Devuelve verdadero si hay una colisin cuando la instancia actual es colocada en la posicin indicada (de nuevo, ya sea slo con objetos slidos o con toda clase de objetos).

If there is an object at a position Esta pregunta devuelve verdadero si la instancia colocada en la posicin indicada encuentra una instancia del objeto indicado.

If the number of instances is a value Especificas un objeto y un nmero. Si el nmero de instancias del objeto es igual al nmero la pregunta devuelve verdadero. De otra forma devuelve falso. Puedes tambin indicar que la revisin debiera ser si el nmero de instancias es menor o mayor que el valor. Esto se usa normalmente para checar si todas las instancias de un tipo en particular han desaparecido. Este es normalmente el momento de terminar el nivel o el juego.

With a change perform next action Especificas el nmero de lados del dado. Entonces si el dado cae en uno, el resultado es verdadero y se realiza la accin. Esto se puede emplear para agregar cierta aleatoriedad en tu juego. Por ejemplo, en cada paso puedes generar con cierta probabilidad una bomba o un cambio de direccin. Entre mayor sea el nmero de lados del dado, la probabilidad es menor. Puedes emplear nmeros reales. Por ejemplo, si configuras el nmero de lados a 1.5 la siguiente accin se realizar dos de tres veces. El emplear un nmero menor que 1 no tiene sentido.

If the user answers yes to a question Especificas una pregunta. Se muestra una ventana de dilogo al usuario con dos botones: Yes y No. El resultado es verdadero si el jugador contesta Yes.

If an expression is true Puedes introducir una expresin. Si la expresin se evala como verdadera (esto es, un nmero mayor o igual a 0.5) se realizar la siguiente accin. Ve ms abajo para ms informacin sobre las expresiones.

If a mouse button is pressed Devuelve verdadero si el botn indicado del ratn es presionado. Un uso estndar est en el evento paso. Puedes checar si un botn del ratn est presionado, y si es as, por ejemplo moverte a esa posicin (usa la accin jump to a point con los valores

mouse_x

mouse_y).

If instance is aligned with grid Devuelve verdadero si la posicin de la instancia se encuentra sobre una cuadrcula. Especificas el espaciado horizontal y vertical de la cuadrcula. Esto es muy til cuando ciertas acciones, como el dar una vuelta, no son permitidas cuando se est alineado a una posicin en la cuadrcula.

Start of block Indica el inicio de un bloque de acciones.

End of block Indica el final de un bloque de acciones.

Else Detrs de esta accin sigue el else, que se ejecuta cuando el resultado de la pregunta es falso. Repeat next action Esta accin se emplea para repetir la siguiente accin (o bloque de acciones) cierto nmero de veces. Puedes simplemente indicar el nmero.

Exit the current event Cuando se encuentra esta accin, no se realiza ninguna otra en el evento. Normalmente se emplea despus de una pregunta. Por ejemplo, cuando una posicin est libre no se necesita hacer nada por lo que salimos del evento. En este ejemplo, las acciones siguientes son solo ejecutadas cuando hay una colisin.

Si deseas ms control sobre lo que est ocurriendo en el juego puedes uar el lenguaje de programacin de Game Maker, el GML, que se explica en la segunda parte del manual. Te da mucha ms flexibilidad que usando las acciones, gracia a que puedes usar tus propias variables. Las acciones siguientes se ocupan de esto: Execute a piece of code Cuando agregas esta accin, se muestra una ventana en la que puedes introducir una pieza de cdigo. ste funciona en la misma forma que definir scripts. La nica diferencia es que puedes indicar para qu instancias se debe ejecutar el cdigo. Usa esta accin para pequeas piezas de cdigo. Para piezas ms largas se te recomienda usar scripts.

Comment Usa esta accin para agregar una lnea de comentarios a la lista de acciones. La lnea se muestra en fuente cursiva. No hace nada cuando se ejecuta el evento. El agregar comentarios te ayuda a recordar lo que ests haciendo en tus eventos.

Set the value of a variable Hay muchas variables internas en el juego. Con esta accin puedes cambiar sus valores. Tambin puedes crear tus propias variables y asignarles valores. Indicas el nombre de la variable y un nuevo valor. Cuando seleccionas la opcin Relative, el valor se suma al valor actual de la variable. Por favor nota que esto slo puede usarse si la variable ya tiene un valor asignado!. Ve ms adelante para ms informacin sobre las variables.

If a variable has a value Con esta accin puedes checar cul es el valor cierta variable. Si el valor de la variable es igual al nmero introducido, la pregunta

devuelve true. En cualquier otro caso devuelve false. Puedes indicar si se checar si la el valor es menor o mayor que el dado. Ve abajo para ms informacin sobre las variables. De hecho, tambin puedes usar esta accin para comparar dos expresiones.

Draw the value of a variable Con esta accin puedes dibujar el valor de una variable en cierta posicin de la pantalla. Esta accin slo se puede usar en el evento Draw.

Acciones de score
En la mayora de los juegos el jugador tendr cierto score. Tambin muchos juegos le dan al jugador cierto nmero de vidas. Finalmente, a menudo el jugador cuenta con cierto nivel de energa. Las siguientes acciones permiten manejar de manera sencilla el score, las vidas y la energa del jugador.

Set the score Game Maker tiene un mecanismo interno de score. El score normalmente se muestra en el ttulo de la ventana. Puedes usar esta accin para cambiar el score. Simplemente introduces un nuevo valor para ste. A menudo querrs agregar puntos al score. En este caso no olvides seleccionar la opcin Relative.

If score has a value Con esta pregunta puedes checar si el score ha alcanzado un valor en particular. Puedes indicar el valor y si el score debe ser igual, menor o mayor a ese valor.

Draw the value of score Con esta accin puedes dibujar el valor del score en cierta posicin de la pantalla. Proporcionas la posicin y el ttulo que se mostrar antes del score. El score se dibuja con la fuente actual. Esta accin slo puede emplearse en el evento draw de algn objeto.

Display the highscore table Cada juego guarda los diez mejores scores. Esta accin muestra la lista de rcords. Si el score actual est entre los mejores diez, el nuevo score se inserta y el jugador puede introducir su nombre. Puedes indicar la imagen de fondo a usar, si la ventana tendr borde, el color para la nueva y las otras entradas, y la fuente a emplear.

Clear the highscore table Esta accin vaca la tabla de rcords.

Set the number of lives El Game Maker tambin cuenta con un sistema interno de vidas. Con esta accin puedes cambiar el nmero de vidas que quedan. Normalmente lo pones a un valor como 3 al inicio del juego y lo aumentas o disminuyes dependiendo de lo que ocurra. No olvides

seleccionar la opcin Relative si deseas agregar o restar al nmero de vidas. En el momento en que el nmero de vidas llegue a 0 ( menos que 0) se genera un evento no more lives.

If lives is a value Con esta pregunta puedes checar si el nmero de vidas ha llegado a un cierto valor. Puedes indicar el valor y si el nmero de vidas debe ser igual, menor o mayor a ese valor.

Draw the number of lives Con esta accin puedes dibujar en pantalla en nmero de vidas. Das la posicin y el ttulo que se colocar antes del nmero de vidas. El nmero de vidas se dibuja con la fuente actual. Esta accin slo puede ser usada en el evento draw de algn objeto.

Draw the lives as image En lugar de indicar el nmero de vidas con un nmero, es mejor usar pequeas imgenes para indicar las vidas. Esta accin hace eso precisamente. Especificas la posicin y la imagen, y en la posicin indicada se dibuja el nmero de vidas como imgenes. Esta accin slo puede emplearse en el evento draw de un objeto.

Set the health Game Maker tiene un mecanismo interno de energa. Puedes emplear esta accin para cambiar la energa. Un valor de 100 se considera como energa completa y 0 es sin energa. Simplemente das un nuevo valor para la energa. A menudo querrs restar algo a la energa. En este caso no olvides seleccionar la opcin Relative. Cuando la energa sea igual o menor que 0 se genera un evento out of health.

If health is a value Con esta pregunta puedes checar si la energa ha alcanzado cierto valor. Indicas el valor y si la energa debe ser igual, menor o mayor que ese valor.

Draw the health bar Con esta accin puedes dibujar la energa en forma de una barra. Cuando la energa es 100 la barra es dibujada completa. Cuando es 0 la barra est vaca. Puedes indicar la posicin y el tamao de la barra de energa y el color para la barra y el fondo de la misma.

Set the window caption information Normalmente en el ttulo de la ventana se muestra el nombre del cuarto y el score. Con esta accin puedes cambiar esto. Puedes indicar si se muestra o no el score, las vidas, la energa y los ttulos para estas opciones.

Acciones de dibujo

Normalmente, a cada instancia se le dibuja su sprite en cada paso del juego. Puedes cambiar esto poniendo acciones en el evento draw de un objeto. Observa que estas acciones slo se ejecutarn si estn colocadas en el evento draw y la instancia es visible, en cualquier otro caso simplemente se ignoran.

Draw a sprite image Indicas el sprite, la posicin (ya sea absoluta o relativa a la posicin actual de la instancia) y la subimagen del sprite. (Las subimgenes estn numeradas de 0 hacia arriba). Si quieres dibujar la subimagen actual, usa el nmero 1.

Draw a background image Indicas la imagen de fondo, la posicin (absoluta o relativa) y si la imagen debe o no repetirse en todo el cuarto.

Draw a text Indicas el texto y la posicin. Un smbolo # en el texto se interpreta como el inicio de una nueva lnea. (Usa \# para mostrar el smbolo #). Por lo que puedes crear texto multilnea. Si el texto inicia con comilla simple o doble, es interpretado como una expresin. Por ejemplo, puedes usar

'X: ' + string(x)


para mostrar el valor de la coordenada x de la instancia. (La variable x guarda la coordenada x actual. La funcin string() convierte este nmero en una cadena. + combina las dos cadenas).

Draw a text transformed Esta accin es similar a la accin anterior pero en este caso puedes escalar el texto vertical y horizontalmente y rotarlo un ngulo determinado. Esta accin slo est disponible en la versin registrada.

Draw a rectangle Indicas las coordenadas de las dos esquinas opuestas del rectngulo, ya sean absolutas o relativas a la posicin actual de la instancia.

Draw a horizontal gradient Esta accin tambin dibuja un rectngulo pero lo rellena con un degradado de izquierda a derecha. Tienes que especificar las coordenadas del rectngulo y los dos colores para el degradado. Esta accin slo est disponible en la versin registrada.

Draw a vertical gradient Esta accin es igual que la anterior pero el degradado es de abajo a arriba. Esta accin slo est disponible en la versin registrada.

Draw an ellipse Indicas las coordenadas de las dos esquinas opuestas del rectngulo alrededor de la elipse, ya sean absolutas o relativas a la posicin actual de la instancia.

Draw a gradient ellipse Igual que la anterior pero puedes especificar un color para el centro y otro para el borde para rellenar la elipse con un degradado. Esta accin slo est disponible en la versin registrada.

Draw a line Indicas las coordenadas de los dos extremos de la lnea; ya sean absolutas o relativas a la posicin actual de la instancial.

Draw an arrow Dibuja una flecha. Puedes especificar las coordenadas del principio y final de la fecha y el tamao de la punta.

Set the colors Te permite seleccionar el color usado para rellenar los rectnguos y elipses, y el color empleado para las lneas alrededor de los rectngulos y elipses y para dibujar una lnea.

Change fullscreen mode Con esta accin puedes cambiar el modo de la pantalla de ventana a pantalla completa y viceversa. Puedes indicar si se cambia entre modos o si cambiar a modo de ventana o a modo a pantalla completa.

Take a snapshot image of the game Puedes sacar una foto de la pantalla y guardarla como una imagen .bmp. Debes especificar el nombre del archivo donde se guardar la imagen. Esta accin slo est disponible en la versin registrada.

Create an effect Con esta accin puedes crear varios efectos de una manera sencilla. Especificas el tipo de efecto (explosion, humo,), su posicin, tamao y color y si debe dibujarse sobre los objetos o bajo ellos. Todo lo dems es automico (para el efecto de lluvia la posicin es irrelevante porque siempre cae desde la parte superior de la pantalla. Para conseguir lluvia continua debes llamar a esta accin desde el evento step). Esta accin slo est disponible en la versin registrada.

Usando expresiones y variables


En muchas acciones necesitas especificar valores para los parmetros. En lugar de escribir un nmero, puedes poner una frmula (ejemplo: 32*12). Pero tambin puedes proporcionar expresiones mucho ms complicadas. Por ejemplo, si quieres doblar la velocidad horizontal, puedes poner

2*hspeed. En esta expresin hspeed es una variable que se refiere a la velocidad horizontal actual de la instancia.

Tambin hay otras variables que puedes usar, las ms importantes son las siguientes: x coordenada x de la instancia

y coordenada y de la instancia hspeed velocidad horizontal (en pxeles por step) vspeed velocidad vertical (en pxeles por step) direction direccin actual en grados (de 0 a 360) speed velocidad actual en esta direccin visible si el objeto es visible (1) o no (0) image_index esta variable indica qu subimagen del sprite se est dibujando. Si pones la variable image_speed a 0 puedes mostrar una imagen fija, parando la animacin del sprite. image_speed indica la velocidad con la que las subimgenes del sprite cambian durante la animacin. Por defecto vale 1. Si pones un valor mayor a 1 algunas subimgenes de la animacin se saltan y de la impresin de que la animacin va ms rpido. Si lo haces menor que 1 las subimgenes se repiten y da la impresin de que la animacin va ms lenta. score valor actual del score lives nmero actual de vidas health health actual (0-100) mouse_x posicin x del ratn mouse_y posicin y del ratn Puedes cambiar casi todos estos valores usando la accin set variable. Tambin puedes definir tus propias variables simplemente dndoles un valor (no uses la opcin relative al hacer esto, pues todava no existe esa variable). Tambin puedes usarlas luego en expresiones. Las variables que creas son variables locales de la instancia, es decir, cada objeto tiene la suya propia distinta a la de los dems. Para crear una nica variable para todos, pon global seguido de un punto delante del nombre de la variable.

Tambin puedes acceder a las variables de los dems objetos poniendo el nombre del objeto, un punto y el nombre de la variable a la que quieres acceder. Por ejemplo, para mover una pelota al lugar donde hay una moneda puedes dar a la posicin los valores (moneda.x , usando etc.

moneda.y). En caso de colisin, puedes acceder a las variables del otro objeto (el objeto contra el que ests chocando)

other.nombre_de_la_variable. En expresiones condicionales puedes usar comparaciones como < (menor que), >,

Por ltimo, tambin puedes usar funciones. Por ejemplo, la funcin

random(10) devuelve un nmero real menor que 10. As, puedes

hacer que la velocidad o la direccin tomen este valor. Existen muchas ms funciones que se describen en la parte del manual dedicada al GML.

Creando rooms
Ahora que has definido los objetos con su comportamiento en forma de eventos y acciones, es hora de crear los cuartos o niveles en los que se llevara a efecto el juego. Cualquier juego requerir al menos un cuarto. En estos cuartos colocamos instancias de los objetos. Una vez que el juego inicia se muestra el primer cuarto y las instancias en l

toman vida por las acciones en sus eventos de creacin.

Hay un gran nmero de posibilidades al crear cuartos. Adems de establecer ciertas propiedades y agregar las instancias de los objetos puedes agregar fondos, definir vistas, y agregar tiles. La mayora de estas opciones se discuten ms adelante en el Captulo 20. en este captulo solamente discutiremos las opciones bsicas, el agregar instancias de

objetos y la configuracin de las imgenes de fondo.

Para crear un cuarto, selecciona Add Room en el menu Add. Se muestra la siguiente ventana:

En la parte superior de la ventana hay una barra de herramientas. Desde ella puedes indicar el tamao de las celdas de la rejilla usada para alinear objetos, si deben mostrarse o no los fondos,...A veces es til ocultar temporalmente algunos elementos del room. Observa que cuando ests aadiendo instancias de ojetos stas siempre se mostrarn, independientemente de la configuracin de las vistas. Tambin hay botones para eliminar todas las instancias del room o para moverlas una cantidad determinada de pxeles. Usa valores negativos para moverlas hacia arriba o a hacia la izquierda. Esto es muy til cuando decides agrandar el cuarto (o para situar instancias fuera del room).

Finalmente estn los botones Undo para deshacer los cambios y OK para guardarlos (usa la cruz en la esquina superior derecha para cerrar la ventana sin guardar los cambios).

A la izquierda hay tres fichas (cinco en modo advanced). La ficha objects es donde puedes agregar instancias de los objetos al cuarto. En la ficha settings puedes indicar varias opciones para el cuarto. En la ficha backgrounds puedes configurar las imgenes de fondo para el cuarto.

Aadiendo instancias
A la derecha en la ventana de diseo puedes ver el cuarto. Al principio est vaco, con un fondo gris.

Para agregar instancias al cuarto, primero selecciona la ficha objects si no est visible. A continuacin selecciona el objeto que deseas agregar haciendo click en el botn con icono de un menu (o haciendo clic en el rea de imagen a la izquierda). La imagen del objeto aparece a la izquierda. (observa que hay una cruz en la imagen. Esta indica cmo se

alinearan las instancias con la cuadrcula). Ahora haz click con el botn izquierdo del ratn en el rea a la derecha. Aparece una instancia del objeto. sta se alinear a la cuadrcula indicada. Si mantienes presionada la tecla <Alt> mientras colocas la instancia no se alinear a la cuadrcula. Si mantienes presionado el botn mientras mueves el ratn puedes mover la instancia sobre la room hasta una nueva posicin. Si pulsas <Shift> mientras pulsas el botn y mueves el ratn aadirs varias instancias a la vez. Con el botn derecho del ratn puedes eliminar las instancias. De esta manera es como defines el contenido del cuarto. Si mantienes presionado el botn mientras lo arrastras sobre el cuarto, eliminars varias instancias.

Como te dars cuenta, si colocas una instancia sobre otra, la primera desaparece. Normalmente ser lo que desees, pero no siempre. Esto puede evitarse al deshabilitar la opcin Delete underlying a la izquierda.

Si quieres cambiar la posicin de una instancia pulsa la tecla <Ctrl> y pincha con el botn izquierdo del ratn. Sin solta ninguna de las dos teclas puedes arrastrar la instancia a una nueva posicin (usa <Alt> para posicionarlo con mayor precisin).

Si mantienes pulsado <Ctrl> mientras pinchas con el botn derecho sobre una instancia aparece un men. Desde este men puedes borrar la instancia, especificar un posicionamiento preciso o mover la instancia al frente sobre todas las dems o al fondo bajo el resto.

Configuracin del room


Cada cuarto tiene ciertas opciones que puedes cambiar haciendo click en la ficha settings. Slo trataremos las ms importantes aqu.

Cada cuarto tiene un nombre, mejor dale uno con sentido. Tambin hay un ttulo. Este ttulo se muestra en la ventana cuando se ejecuta el juego. Puedes establecer el ancho y alto del cuarto (en pxeles). Tambin puedes configurar la velocidad del juego. Este es el nmero de pasos por segundo. Cuanto mayor sea la velocidad, ms suave ser el movimiento. Pero necesitars una computadora ms rpida para ejecutarlo.

Configurando el fondo
Con la ficha backgrounds puedes establecer la imagen de fondo para el cuarto. De hecho, puedes indicar varios fondos. La ficha se ve como sigue:

En la parte superior versa el color de fondo. Puedes hacer clic sobre este para cambiarlo. El color de fondo slo es til si no usas una imagen de fondo que cubra todo el cuarto. De otra forma, mejor deshabilita la opcin Draw background color ya que significara una prdida de tiempo.

Arriba vers una lista de 8 fondos. Puedes definir cada uno de ellos pero la mayora de las veces slo necesitaras uno dos. Para definir un fondo, primero selecciona uno en la lista. A continuacin marca la opcin Visible when room starts o de otra forma no lo vers. El nombre del fondo se pondr en negritas cuando est definido. Ahora indica una

imagen de fondo en el menu. Hay ciertas opciones que puedes cambiar. Primero de todo puedes indicar si la imagen de fondo se repetir horizontal y/o verticalmente. Puedes tambin indicar la posicin del fondo en el cuarto (esto tambin influir el tiling). Otra opcin es usar la opcin Stretch para que el fondo ocupe toda la pantalla (puede distorsionar la imagen). Finalmente puedes hacer que el fondo se desplace dndole una velocidad horizontal o vertical (pxeles por step). No se recomienda dar velocidad al fondo si usas la opcin Stretch.

Hay una opcin ms llamada Foreground image. Cuando la activas, el fondo se colocar en primer plano, y se dibujar al frente de todo en lugar de detrs de todo. Obviamente una imagen de este tipo debiera ser parcialmente transparente para que tenga alguna utilidad.

Distribuyendo tu juego
Con la informacin de los captulos anteriores puedes crear tus juegos. Una vez que hayas creado un buen juego probablemente quieras darlo a otras personas para que lo jueguen. Puedes distribuir libremente y en la forma que desees los juegos que crees con el Game Maker. Incluso puedes venderlos. Lee el acuerdo de licencia adjunto para ms informacin al respecto.

Bsicamente hay tres diferentes formas en las que puedes distribuir tus juegos. La manera ms fcil es simplemente dar el archivo *.gm6 que contiene el juego. Sin embargo la otra persona debe tener el Game Maker. (No se te permite distribuir el Game Maker con tu juego peros ellos pueden bajarlo gratuitamente desde el sitio Web). Adems, la otra persona puede hacer cambios al juego.

La segunda forma es crear un ejecutable del juego. Esto puede hacerse seleccionando la opcin Create Executable en el menu File. Se te pedir un nombre para el ejecutable que contendr el juego. Indica un nombre, presiona OK y tendrs un juego ejecutable que puedes dar a quien t quieras. Puedes configurar el icono para el juego ejecutable en la ventana Global Game Settings (Si tu juego usa algn otro archivo debieras copiarlos a la carpeta que contiene el ejecutable del juego). Ahora puedes distribuir este archivo a otras personas (tal vez quieras comprimirlo antes).

La tercera opcin es crear un archivo de instalacin. Hay varios programas freeware para la creacin de instaladores disponibles en la red. Lo primero es crear una versin ejecutable del juego y luego emplear el instalador para crear una instalacin. Cmo se haga esto depende del instalador que emplees.

Uso avanzado
En esta seccin se describen los aspectos ms avanzados de Game Maker. En ella se explican los paths, fuentes, time lines, scripts y las tcnicas para crear rooms con tiles y el uso de vistas. Esta seccin se divide en los siguientes temas: Modo avanzado Ms sobre los sprites Ms sobre sonido y msica Ms sobre los fondos Ms sobre los objetos Ms acciones Ms sobre las rooms Fuentes Paths Time lines Scripts

Modo avanzado
Hasta ahora hemos considerado las opciones ms simples de Game Maker. Pero hay muchas mas posibilidades. Para habilitarlas debes ejecutar Game Maker en Modo Avanzado (Advanced Mode).

Es fcil de cambiar. En el Men File, click en el tem Advanced Mode. (Para ver los cambios debes reiniciar Game Maker o al menos guardar tu juego y volver a cargarlo). Cuando comience Game Maker en Advanced Mode, el siguiente formulario se mostrara:

Contiene todo lo que estaba en Simple Mode, pero hay un nmero de recursos adicionales, botones e tems de men. Tambin, como veremos en los siguientes captulos los diferentes recursos tienen opciones adicionales. Aqu analizaremos los diferentes tems del men.

Men File
En el Men File puedes encontrar los siguientes comandos.

Merge Game (Unir Juego). Con este comando puedes unir todos los recursos (sprites, sonidos, objetos, cuartos, etc.) de otro juego en tu actual proyecto. Esto es bastante til se deseas hacer algo que quieras volver a usar (Ej.: Sistemas de men). Fjate que todos los recursos, instances y tiles tendrn nuevos nombres lo que puede causar problemas si los usas en scripts. Es tu responsabilidad hacer que sea seguro que los recursos en los dos diferentes archivos tengan distintos nombres, de otro modo, podran aparecer problemas.

Preferences (Preferencias). Aqu puedes configurar varias opciones del programa. Estas opciones se aplicarn cada vez que uses Game Maker y se explican en el apartado siguiente.

Preferencias
Aqu puedes poner un nmero de preferencias sobre Game Maker. Estas sern recordadas entre diferentes llamadas a Game Maker. Las siguientes preferencias se podrn elegir:

Show recently edited games in the file men (Mostrar los juegos recientemente editados en el Men File): Si est chequeada los ocho juegos mas recientemente editados sern mostrados debajo de recent files en el Men File. Load last opened file on startup (Cargar el ltimo juego abierto al comienzo): Si est chequeada cuando comiences Game Maker el archivo abierto ms recientemente ser abierto automticamente. Maximal number of backups (Mximo numero de copias): Aqu indicas cuntas (1-9) diferentes copias de respaldo deben ser recordadas por el programa. Show progress while loading and saving files. Cuando se carga o se guarda el juego se muestra un indicador de progreso. At startup check for and remove old temporary files. Game Maker y los juegos creados con l, crean unos archivos temporales. Normalmente estos archivos se eliminan automticamente pero a veces, debido a fallos en los juegos, no ocurre as. Activando esta opcin Game Maker chequea si existen archivos de este tipo y los elimina al arrancar.

Run games in secure mode. (Ejecutar el juego en modo seguro): Si est chequeada, cualquier juego creado con Game Maker que funcione en tu maquina, no permitir ejecutar programas externos, o cambiar o eliminar archivos en un lugar diferente del que se encuentre el juego (Esto es una garanta contra Troyanos). Chequendola puede hacer que ciertos juegos que usen archivos externos no se ejecuten correctamente. Esta opcin slo funciona al ejecutar los juegos desdeGame Maker y no al jugarlos desde el ejecutable.

Show the origin and bounding box in the sprite image (Mostrar el origen y la bounding box en el sprite): Si est chequeada, en el formulario de propiedades del sprite, el origen y la bounding box del sprite ser indicada. In object properties, show hints for actions (En las propiedades del objeto, mostrar descripcin para las acciones): Si esta chequeada, en el formulario de propiedades del objeto, cuando pases el puntero del mouse sobre alguna de las acciones, una descripcin ser mostrada.

When closing, remove instances outside the room. Si se activa, el programa te avisar si hay instancias o tiles fuera del room y te preguntar si quieres eliminarlas. Remember room settings when closing the form. (Recordar la configuracin del cuarto cuando se cierre el formulario): Si esta chequeada, un numero de opciones del cuarto; como whether to show the grid, whether to delete underlying objects, etc. sern recordadas cuando edites el cuarto ms adelante.

Scripts and code and colors (Scripts y cdigo en colores): Consulta el captulo sobre scripts para ms informacin. Image editor (Editor de imgenes): Por defecto Game Maker tiene un editor interno de imgenes t tienes un mejor programa editor de imgenes puedes indicarlo aqu para usar un programa diferente para edita imgenes. External sound editors (Editores externos de sonido): Puedes indicar qu editor externo quieres usar para los diferentes tipos de sonido. (Fjate que Game Maker no tiene un editor interno de sonido, por lo que si no indicas ninguno no podrs editar los sonidos).

Men Edit
En el Men File puedes encontrar los siguientes comandos:

Insert group (Insertar grupo): Los recursos pueden ser agrupados juntos. Esto es bastante til si t haces un juego grande. Por ejemplo, puedes poner todos los sonidos relativos a un objeto juntos en un grupo, o puedes agrupar todos los objetos que usas en un nivel en particular. Este comando crea un nuevo grupo en el tipo de recurso seleccionado actualmente. Te preguntaras por el nombre. Los grupos pueden contener otros grupos dentro de ellos, etc. Como indica bajo puedes arrastrar recursos hacia los grupos.

Find Resource (Buscar recurso): Con este comando pones el nombre del recurso y abre el formulario de propiedades correspondiente. Expand Resource Tree. Expande completamente el rbol de recursos, mostrndolos todos. Collapse Resource Tree. Contrae completamente el rbol de recursos, ocultndolos todos. Show Object Information. Con este comando puedes obtener un resumen de todos los objetos del juego.

Men Add
Con este men puedes aadir recursos adicionales. Fjate que para cada uno de ellos hay un botn en la barra de herramientas y un mtodo abreviado del teclado.

Men Scripts
En este men puedes encontrar los comandos siguientes:

Import Scripts. Se usa para importar scripts desde otros archivos. Export Scripts. Sirve para guardar tus scripts en un archivo para poder distribuirlos. Cuando seleccionas un script slo se es guardado. Cuando seleccionas un grupo de scripts se guardan todos los scripts del grupo. Cuando seleccionas el recurso raz (o un tipo diferente de recurso) se guardan todos los scripts. Tambin puedes acceder a este men clickando con el botn derecho del ratn sobre un script o un grupo de scripts.

Show Built-in Variables. Muestra una lista ordenada de todas las variables propias locales y globales. Show Built-in Functions. Muestra una lista ordenada de todas las funciones de Game Maker. Show Constants. Muestra una lista de todas las constantes propias de Game Maker y de las definidas en las opciones del juego. Show Resource Names. Muestra una lista ordenada de todos los recursos. Puedes pinchar en los recursos para editarlos. Search in Scripts. Puedes buscar una cadena de texto en todos los scripts a la vez. Puedes pinchar en los resultados para editar ese script. Check Resource Names. Chequea todos los nombres de los recursos, mostrando los nombres incorrectos, duplicados o si coinciden con una variable, funcin o constante. Puedes pinchar en los resultados para editar ese recurso. Check All Scripts. Chequea todos los scripts buscando errores. Puedes pinchar en los resultados para editar ese script.

Ms sobre los sprites


Existen varias posibilidades avanzadas para crear tus propios sprites. La informacin sobre las opciones avanzadas de los sprites se halla en los siguientes temas: Editando los sprites Strips Editando subimgenes individualmente Caractersticas avanzadas de los sprites

Editando los sprites


Hasta ahora, cargbamos nuestros sprites desde archivos. Sin embargo, tambin es posible crearlos o editarlos con Game Maker. Para hacer esto, abre la ventana de propiedades de sprite, pulsando sobre uno de tus sprites. (O creando uno nuevo). Ahora presiona el botn etiquetado como Edit Sprite. Un Nuevo formulario aparecer mostrando todas las subimgenes que forman el sprite.

El formulario de edicin del sprite tiene el siguiente aspecto:

A la derecha veras las diferentes imgenes que forman el sprite. Observa que en Game Maker todas las subimgenes de un sprite, deben tener el mismo tamao. A la izquierda, se reproduce una animacin del sprite. (Si no ves la animacin, active la opcin Show Preview.) Bajo la previsualizacin, puedes cambiar la velocidad de animacin y el color de fondo. De esta manera, puedes hacerte una idea de como se vera la animacin en el juego. (Observa que esta velocidad es solo para la previsualizacin. La velocidad de la animacin durante el juego, depende de la velocidad del nivel (room).

El editor de sprites contiene una gran variedad de funciones para crear o modificar el sprite. Puedes acceder a todas a travs de los mens. (Para algunas, hay botones directamente en la barra de herramientas.) Algunos comandos trabajan sobre imagines individuales. Requieren que primero selecciones una sub-imagen con el ratn.

Men File

El men File contiene un cierto numero de funciones para cargar y grabar sprites.

New. Crea un Nuevo sprite vaco. Debes indicar el tamao del sprite. (Recuerda que todas las imagines deben tener el mismo tamao.) Create from file. Crea el sprite desde un archivo. Pueden usarse gran variedad de tipos de archivo. Todos crean un sprite consistente en una imagen simple, a excepcin de los GIFs animados, que son divididos en sus sub-imgenes. Por favor date cuenta de que el color transparente es el que tiene el pxel situado en la esquina inferior izquierda del sprite, no el color transparente del archivo GIF. Puedes elegir mltiples imagines para que se carguen todas. Deben tener el mismo tamao.

Add from file. Aade una imagen (o imgenes) de un archivo al sprite con el que estemos trabajando. Si las imagines no tienen el mismo tamao, puedes elegir donde ponerlas o estirarlas/encogerlas. Puedes elegir varias imagines para que se carguen todas. Deben tener el mismo tamao.

Save as GIF. Guarda la imagen como un gif animado. Save as strip. Guarda todas las imagines en formato bmp (mapa de bits), con todas las subimgenes colocadas una junto a otra. Create from strip. Te permite crear un sprite desde un strip (tira de imgenes). Mira debajo para ms informacin. Add from strip. Utiliza esta opcin para aadir imgenes de una tira (strip). Ms info debajo. Close saving changes. Cierra el formulario, guardando los cambios realizados en el sprite. Si no quieres guardar los cambios, pulsa sobre el botn de cierre de la ventana.

Men Edit

El men edicin contiene varios comandos para trabajar con el sprite seleccionado. Puedes cortarlos al portapapeles (clipboard), pegar una imagen desde el portapapeles, borrar el sprite y cambiar el orden de las subimgenes dentro de la secuencia de la animacin. Por ltimo, existe un comando para editar una subimagen de forma individual, utilizando el programa de dibujo incorporado de GM (ver debajo).

Men Transform

En el men transform puedes realizar algunas transformaciones sobre las imgenes.

Mirror horizontal. Invierte horizontalmente la imagen. Flip vertical. Invierte verticalmente la imagen. Shift. Con esta opcin puedes deslizar las imgenes a derecha o izquierda segn especifiques Rotate. Puedes rotar las imgenes 90 grados, 180, o cualquier otra cantidad de grados arbitrariamente. En el ltimo caso, debes especificar la calidad. Experimenta para conseguir mejores resultados. Resize Canvas. Aqu puedes cambiar el tamao del lienzo. Tambin puedes indicar donde se sitan las imgenes antiguas dentro del nuevo lienzo. Stretch. Te permite estirar o contraer las imgenes a un Nuevo tamao. Puedes indicar la escala y la calidad.

Scale. Este comando cambia de tamao las imgenes (pero no el tamao del sprite que hay en su interior!). Puedes indicar la escala, la calidad y la posicin de las imgenes actuales dentro de las escaladas.

Men Images

En el men images puedes realizar varias operaciones sobre las imgenes.

Cycle left. Mueve todo el ciclo una posicin a la izquierda. Esto hace que la animacin comience en un punto diferente. Cycle right. Mueve todo el ciclo de la animacin una posicin hacia la derecha. Black and white. Transforma el sprite en uno en blanco y negro (no afecta al color transparente!). Colorize. Te permite cambiar el color (matiz) de las imgenes. Utiliza el deslizador para conseguir diferentes colores. Colorize Partial. Te permite cambiar el color de parte de las imgenes. Puedes seleccionar el color antiguo y un rango (espectro) de colores similares, para despus indicar en Nuevo color en que se convertirn los colores de este espectro. Esto puede utilizarse par alas instancias para cambiar solo el color de las camisetas de los jugadores, por ejemplo.

Shift Hue. Otra forma de cambiar el color de las imgenes. Pero en esta ocasin, los colores varan sobre la cantidad indicada, consiguiendo efectos ms interesantes. Intensity. Te permite cambiar la intensidad, introduciendo valores para la saturacin y la luminosidad de las imgenes. Invert. Invierte el color de las imgenes. Fade. Aqu especificas un color una cantidad. Los colores en las imgenes realizaran un degradado hacia ese color. Transparency. Te permite indicar un nivel de transparencia. Se consigue transformando un determinado nmero de sprites en pxeles transparentes. Blur. Desenfocando las imgenes, los colores se mezclan un poco, la imagen. Outline. Crea un contorno alrededor de la imagen. Se te pregunta el color y si las imgenes actuales deben ser borradas o no (dejando solo el contorno). Boundary. Similar al contorno, pero no se dibuja fuera, sino sobre los pxeles de los mrgenes. Crop. Esto hace que las imgenes sean lo mas pequeas posible. Esto es muy til, porque, a mayores imgenes, ms memoria de video se necesita. Deberas dejar solo un pequeo borde alrededor de los sprites para evitar problemas con las transparencias. mas difusos. Cuanto mayor sea el valor, mas difusa se vera

Experimenta con estos comandos para conseguir los sprites que pretendes.

Men Animation

Bajo el men de animacin puedes crear nuevas animaciones fuera de la animacin actual. Hay muchas opciones, deberas experimentar un poco para crear los efectos que quieres. Tampoco olvides que puedes guardar una animacin y aadirla despus a la actual. Tambin puedes aadir algunas imgenes vacas y borrar las que no necesites. Explicaremos brevemente las diferentes posibilidades.

Set Length. Te permite cambiar la longitud de la animacin. La animacin se repite las veces necesarias para conseguir el nmero de frames que indiques. (Normalmente deseas que sea un mltiplo del nmero actual de frames.)

Stretch. Este comando tambin cambia la longitud de la animacin. Pero en esta ocasin, los frames se duplican o se borran para conseguir el nmero adecuado. As que si incrementas el numero de frames, la animacin ira mas despacio, y viceversa. Reverse. Bien, como puedes suponer, invierte la animacin. Se reproduce hacia atrs. Add Reverse. En esta ocasin la secuencia invertida es aadida, doblando el nmero de frames. Esto es muy til cuando quieres que un objeto vaya de izquierda a derecha, cambie de color y vuelva, etc. Translation sequence. Podrs crear una animacin en la que la imagen se trasponga en cada paso. Debes indicar el nmero de pasos y la cantidad total de movimiento vertical u horizontal. Rotation sequence. Crea una animacin en la que la imagen rota. Puedes elegir si lo har hacia la derecha o hacia la izquierda. Especifica el numero de frames y el ngulo total en grados (360 son un giro completo). Es posible que tengas que aumentar antes el tamao del lienzo para estar seguro de que se ven todas las imgenes al completo.

Colorize. Crea una animacin que convierte el color de la imagen en otro. Fade to color. Crea una animacin que efecta un degradado de la imagen hacia un color determinado. Disappear. Hace que la imagen vaya desapareciendo aumentando su transparencia. Shrink. Encoge la imagen hasta hacerla desaparecer. Puedes indicar la direccion. Grow. Hace crecer la imagen desde la nada. Flatten. Aplana la imagen hasta que desaparece. Raise. Hace levantarse la imagen desde la nada. Debes indicar la direccion Overlay. Solapa la animacin con otra animacin o imagen de un archivo. Morph. Transforma la animacin en otra animacin o imagen de un archive. Funciona major si ambas animaciones tienen el mismo tamao.

Los dos ltimos comandos en particular son muy potentes. Por ejemplo, para, hacer explotar un objeto, aade un numero de copias y despus un numero de frames vacos. Despus solpalo con una animacin de explosin. (Augrate de que encaje el nmero de imgenes.) O haz un morph con la explosin. Puedes conseguir sprites estupendos.

Strips
Como indicamos antes, los sprites normalmente se guardan como Gif animados o como tiras de imgenes (strips). Una tira es una imagen grande que guarda todas las imgenes cerca unas de otras. El nico problema es que el tamao original de las sub-imgenes no se guarda en el archive. Adems muchos archivos de este tipo guardan varios sprites en un solo archive. En la siguiente muestra, veremos un strip con cuatro animaciones.

Para seleccionar sprites individuales, puedes elegir la opcin Create from Strip o Add from Strip del men File. Despus de indicar el archivo de strip correcto, aparece el siguiente formulario:

A la derecha puedes ver (en parte) la tira de imgenes que elegiste. A la izquierda puedes indicar ciertos parmetros que especifican en que subimgenes estas interesado. Observa que uno o ms rectngulos en la imagen indican que imgenes estas seleccionando. Estos son los parmetros que pueden ser especificados:

Number of images. El numero de imgenes que quieres coger de la tira (strip). Images per row. Cuantas imgenes de las que hay, quieres por fila. Por ejemplo indicando una sola fila (row) seleccionaras una sola secuencia vertical de imgenes. Image width. Anchura de las imgenes individuales. Image height. Altura de las imgenes individuales. Horizontal cell offset. Si no quieres seleccionar las imgenes de la parte superior izquierda, puedes indicar Aqu cuantas imgenes se ignoraran horizontalmente. Vertical cell offset. Aqu seleccionas cuantas imgenes ignoras verticalmente. Horizontal pxel offset. A veces existe un espacio adicional en la zona superior izquierda. Aqu indicas su tamao (en pxeles). Vertical pxel offset. Tamao vertical del espacio adicional. Horizontal separation. En algunas tiras existen lneas o espacios vacos entre las imgenes. Aqu puedes indicar el espacio horizontal que se debe ignorar entre imagen e imagen (en pxeles). Vertical separation. Espacio vertical a ignorar entre imgenes (en pxeles).

Cuando selecciones el nmero correcto de imgenes, presiona OK para crear el sprite. Por favor recuerda que solo se permiten utilizar imgenes creadas por terceros cuando has pedido su permiso o son freeware.

Editando subimgenes individualmente

Tambin puedes editar las sub-imgenes individualmente. Para terminar selecciona una sub-imagen y elige la opcin Edit Image del men Image. Esto abrir un pequeo programa de dibujo incorporado. Por favor comprueba que se trata de un programa diseado para realizar pequeos cambios en imgenes ya existentes, no para dibujar otras nuevas. Para esto, utiliza mejor un programa de dibujo mas especifico y utiliza los archivos resultantes (o copia y pega) para utilizar la imagen enGame Maker. En las preferencias tambin puedes especificar un editor externo.

El formulario muestra la imagen en el centro y varios botones de herramientas de dibujo bsicas a la izquierda. Aqu podrs aumentar o disminuir el zoom, dibujar pxeles, lneas, rectngulos, textos, etc. Date cuenta de que el color depende del botn del ratn que utilices (derecho o izquierdo). Para algunas herramientas de dibujo puedes definir algunas propiedades (como el ancho de la lnea o la visibilidad del contorno). Existe un botn especial para cambiar todos los pxeles de un color por otro. Esto es particularmente til para cambiar el color de fondo que se utiliza como transparencia. En la barra de herramientas, tenemos algunos botones especiales para mover todos los pxeles de la imagen en una direccin determinada. Tambin puedes indicar si muestras la cuadricula cuando se amplia el zoom de la imagen (Solo funciona con un factor de zoom de 4 como mnimo).

Puedes seleccionar reas normalmente presionando el botn de seleccin y dibujando un rectngulo. Despus coloca el ratn dentro del rea seleccionada para moverla donde quieras. Normalmente el rea original se rellena con el color seleccionado para del botn izquierdo del ratn. Si mueves la seleccin con la tecla <Shift> presionada, el rea original permanecer sin afectar. Con la tecla <Shift> tambin puedes tener mltiples copias del rea seleccionada. Si utilices el botn derecho del ratn para moverte en lugar del izquierdo, la seleccin se considera transparente.

La herramienta texto requiere algo de explicacin. Para aadir un texto, presiona sobre el botn texto y pulsa sobre la imagen. Una ventana emergente donde aadir el texto aparecer, utilice el smbolo # para aadir una lnea. Una vez presiones OKel texto se colocara en la imagen, con una seleccin a su alrededor. Ahora puedes mover el texto presionando con el ratn sobre la seleccin y arrastrndola. Puedes cambiar el texto pulsando con el botn derecho en la seleccin. Utilizando el menText tambin puedes cambiar el alineamiento y la fuente utilizada.

A la derecha del formulario puedes seleccionar los colores a utilizar (uno para el botn izquierdo del ratn y otro para el derecho). Existen cuatro formas de cambiar el color. Primero puedes pulsar con el botn del ratn (izquierdo o derecho) sobre uno de los 16 colores bsicos. Observa que existe una muestra especial de color que contiene el color del pxel inferior izquierdo de la imagen que es el transparente. ^Puedes usar este color para hacer parte del sprite transparente. La segunda manera es pulsando sobre la imagen con el color cambiante. Podrs elegir muchos mas colores. Puedes mantener pulsado el ratn para ver el color que estas seleccionando. En tercer lugar, puedes pulsar con el botn izquierdo en las muestras que indican los colores derecho e izquierdo. Una ventana emergente de colores aparecer y podrs seleccionar el color. Por ltimo, puedes seleccionar la herramienta cuentagotas y pulsar con el botn izquierdo sobre la parte de la imagen que contenga el color que quieres copiar.

Hay dos caractersticas especiales ms. Cuando pulsas la tecla <Ctrl> puedes tomar un color para dibujar de la imagen actual. Cuado pulsas la tecla <Shift> mientras dibujas lneas, solo podrs hacerlas horizontales, verticales o diagonales. Algo similar ocurre cuando presionas la tecla <Shift> mientras dibujas elipses o rectngulos. Solo dibujaras crculos o cuadrados perfectos.

En los mens puedes encontrar las mismas transformaciones y comandos de cambio de imagen, que estn disponibles en el editor de sprites. En esta ocasin solo son aplicables a la imagen actual. (Cuando el sprite tiene varias sub-imgenes, los comandos que cambian el tamao, no estn disponibles.) Tambin puedes guardar la imagen como un archive bmp (mapa de bits). Existen dos comandos adicionales en el men Image:

Clear. Limpia la imagen y la colorea con el color izquierdo (que se convierte en el color transparente). Gradient fill. Con este comando puedes rellenar la imagen con un color que cambia de forma gradual (no muy til para hacer sprites, pero es til para fondos).

Observa que la mayora de las rutinas de dibujo han desaparecido. Para tener ms deberamos utilizar un programa de dibujo ms avanzado (o el sencillo programa de dibujo que viene con Windows). La forma ms sencilla de hacerlo es utilizar el botn copiar para poner la imagen en el portapapeles. En tu programa de dibujo, solo tienes que pegarla. Molifcala y cpala en el portapapeles. Ahora, en Game Maker puedes pegar la imagen modificada.

Caractersticas avanzadas de los sprites


En el modo avanzado, dentro del formulario de propiedades del sprite, hay varias opciones avanzadas sobre las que trataremos a continuacin.

Lo primero que vemos son opciones relacionadas con el chequeo de colisiones. Siempre que dos imgenes se encuentran, se genera un evento de colisin. Las colisiones se generan de la siguiente forma: Cada sprite tiene una caja de contorno. Esta caja contiene la parte no transparente de todas las sub-imgenes. Cuando las cajas de contorno se solapan, (se chequea comprobando cuando dos pxeles de las sub-imgenes de los dos sprites se solapan). Esta segunda operacin es costosa y requiere memoria extra y un preprocesamiento previo. As, que si no estas interesado en una colisin precisa para un determinado tipo de sprite, deberas deseleccionar la opcin Precise colisin checking. En este caso solo se verificara la colisin entre las cajas de contorno y no de su interior. Tambin puedes cambiar el tamao de

la caja de contorno. Esto no se necesita casi nunca, pero en determinadas ocasiones, necesitaras hacer ms pequea la caja de contorno, para que las colisiones con algunas partes del sprite no se tengan en cuenta.

Los bordes de los sprites pueden verse un poco pixelados. Para evitarlo puedes seleccionar la opcin Smooth edges. En este caso los pxeles de los bordes del sprite (los pxeles cercanos a los pxeles transparentes) son dibujados parcialmente transparentes. Esto puede hacer que se vean mucho mejor. (No utilices esta opcin cuando los sprites sean parte de una imagen mayor, porque se vern lneas semi transparentes entre ellos.) El efecto de esta seleccin solo se ve en el juego, no en el editor!

Durante el juego, los sprites se transforman en texturas. Las texturas se deben almacenar en la memoria (en la tarjeta de video) de video antes de utilizarse. Cuando seleccionamos la opcin Preload texture esta accin se hace durante la carga del juego, no existiendo retardo durante el juego). Si tienes muchos sprites de gran tamao que no se van a usar al principio deberas deseleccionar esta opcin. Game Maker guardara las texturas en la memoria de video y las retomara cuando las necesite.

Por ltimo, puedes indicar el origen del sprite. Esto es el punto del sprite que corresponde a su posicin. Cuando defines la posicin de una instancia, el origen del sprite se sita en esa posicin. Por defecto se trata del punto situado en la esquina superior izquierda del sprite, pero a veces es ms conveniente colocar el origen en el centro o en cualquier otro lugar importante del sprite. Incluso puedes elegir un punto fuera del sprite. Tambin puedes definir el origen pulsando sobre la imagen. (Cuando el origen es mostrado en la imagen).

Ms sobre sonido y msica


En el modo avanzado tienes un control mucho mayor sobre los sonidos y msicas del juego. Cuando aadas un sonido se mostrar la siguiente ventana:

Adems de las opciones que ya habamos visto (load, save y play) hay muchas otras que explicaremos ahora:

Primero puedes indicar el tipo de sonido entre los 4 posibles. Normal sounds se usan para efectos de sonido en archivos wav (aunque tambin pueden usare para archivos midi). Multiple normal sounds pueden sonar a la vez. Puedes incluso hacer sonar varias copias del mismo sonido a la vez. Background music es similar a los Normal sounds pero slo puede sonar uno la vez. As que cuando empieza a sonar un sonido de este tipo, los dems sonidos de este tipo dejarn de sonar. Por defecto se usan archivos midi para esto. 3D sound son los sonidos a los que les puedes aplicar efectos especiales mediante el uso de las funciones apropiadas. Slo necesitars estos para efectos de sonido avanzados

Los archivos de sonido suenan a travs de DirectX, lo que nos da muchas posibilidades pero nos limita a archivos del tipo wav o midi. Si quieres utilizar archivos de otro tipo como mp3 tienes que seleccionar la opcin para usar el media placer. Esto limita mucho los sonidos porque no se puede cambiar el sonido o aplicar efectos y slo puede sonar un sonido a la vez. Los archivos midi suenan distinto, debido a que al usar el media placer utilizan el sintetizador de hardware, lo que hace que suenen distinto dependiendo del ordenador en el que suenen. Pero al ser usados como Normal sound o como Background music utilizan un sintetizador de software que suena igual en todos los ordenadores. No se aconseja usar mp3 en los juegos ya que necesitan ser descomprimidos y eso afecta a la velocidad del juego. Aunque sean de menor tamao usan ms memoria, suenan distinto en cada ordenador y no todos los ordenadores los soportan.

Tambin puedes indicar efectos de sonido como chorus (coro) o echo (eco), pero slo en la versin registrada). Puedes combinar los efectos y escucharlos. Usando GML puedes hasta cambiar los parmetros de estos efectos.

Puedes indicar el volumen de cada sonido y en qu altavoz debe sonar (izquierdo o derecho).

Puedes indicar si el sonido de be ser cargado con antelacin (Preload) o no. Cuando un sonido suena primero debe ser cargado en la memoria de audio. Si usas la opcin preload esto se hace al principio del juego, as que cuando necesites que el sonido suene ya estar listo. Si no usas esta opcin, el sonido se carga en la memoria la primera vez que es usado, lo que ahorra memoria pero puede hacer que el sonido tarde un poco en sonar la primera vez que se usa.

Game Maker no tiene un editor interno de sonidos. Pero en Preferences puedes indicar los editores externos que quieras para editar tus sonidos. Si los indicas, puedes presionar en el botn Edit Sound para editar los sonidos que ests usando. (La ventana de Game Maker se ocultara mientras edites tus sonidos y se reestablecer cuando cuando cierres el editor de sonidos).

Ms sobre los fondos


Adems de importarlos desde archivos existentes, tambin tienes la posibilidad de crear tus propios fondos. Para este fn, presiona el botn Edit Background (Editar Fondo). Se abrir un programa de dibujo que viene incluido en el que puedes crear o editar tus fondos. Es importante remarcar que ste no es un programa sofisticado de diseo. Para realizar tareas de diseo ms avanzadas y disponer de herramientas de dibujo ms sofisticadas utiliza algn programa especializado en ello. Hay una opcin que es particularmente til, en el men Image (Imagen) encontrars un comando llamado Gradient Fill (Relleno Degradado). Con esta opcin se pueden crear muy buenos fondos.

En el modo avanzado, la ventana de propiedades de fondo, contiene algunas opciones avanzadas.

Los bordes de los fondos, sobre todo si son transparentes, pueden resultar un poco cuadrados. Para impedir esto puedes usar la opcin Smooth edges. Los pxeles en el borde del fondo (es decir, los pxeles vecinos a los transparentes) son dibujados parcialmente transparentes, con lo que el resultado final es mucho mejor (no uses esta opcin cuando tengas un fondo compuesto por varias imgenes, porque aparecer una lnea transparente entre ellas) Este efecto slo es visible en el juego, no en el editor!

Durante el juego, los fondos se transforman en texturas. Las texturas se cargan en la memoria grfica (en la tarjeta grfica) antes de ser usadas. Si activas la opcin Preload texture esto ocurre inmediatamente cuando comienza el juego, evitando que haya retrasos durante el juego. Si tienes muchos fondos de gran tamao que no se usan al principio del juego es mejor que no uses esta opcin, porque consume mucha memoria. En este caso, Game Maker mover las texturas dentro y fuera de la memoria grfica segn las necesite.

A veces quieres usar un background como un conjunto de tiles, es decir, una coleccin de pequeas imgenes que se unen para formar una imagen mayor. Cuando crees una room puedes aadir estas imgenes en diferentes lugares del room. Esto es muy til para crear niveles vistosos. Para usar un fondo como tile set, usa la opcin Use as tile set. La ventana se mostrar de la forma siguiente:

Puedes configurar varias cosas para el tileset. En particular, puedes indicar la altura y anchura de cada tile (slo puedes indicar un valor, as que asegrate de que todas las tiles tienen el mismo tamao). Tambin puedes indicar el origen para la tile situada arriba y a la izquierda

del todo. Finalmente, se puede indicar la separacin entre tiles (normalmente 0 1). Para ms informacin sobre las tiles, mira el captulo sobre crear rooms.

Aviso: cuando pones bordes separadores entre los sprites y usas interpolacin entre pxeles (consulta las global game settings) pueden aparecer rajas entre las tiles. Para evitarlo, asegrate de que los pxeles alrededor de las tiles son del mismo color que los pxeles en el borde interior de las tiles.

Ms sobre los objetos


Cuando creas un objeto en modo avanzado, puedes cambiar otras opciones avanzadas.

Profundidad
Primero que nada, puedes configurar el depth (profundidad) de las instancias de un objeto. Cuando las instancias son dibujadas, segn el depth se dibujaran una encima de otras. Las instancias con mayor depth son dibujadas primero, y las instancias con menor depth se dibujaran ltimas. Cuando 2 ms instancias poseen el mismo depth, se dibujan segn el orden en el que fueron creadas. Si quieres estar seguro que un objeto se encuentra por encima de los dems, introduce un valor negativo. Si quieres estar seguro que un objeto se encuentra por debajo de los dems, introduce un valor positivo muy alto. Tambin puedes cambiar el depth de una instancia durante el juego usando la variable depth.

Objetos persistentes
Puedes hacer persistente a un objeto. Los objetos persistentes continan existiendo inclusive si pasan de una habitacin a la otra. Estos slo desaparecen cuando los destruyes expresamente. As, solo es necesario poner una instancia del objeto en la primera habitacin y seguir apareciendo en las siguientes habitaciones. Esto es realmente muy til cuando posees un personaje principal que debe moverse de habitacin en habitacin. El uso de objetos persistentes es una herramienta poderosa, pero tambin puede producir errores fcilmente.

Parents
Todo objeto puede poseer un objeto padre. Cuando un objeto posee un objeto padre, este hereda las caractersticas del mismo. Dicho de otra manera, el objeto es una especie de variante del objeto padre. Por ejemplo, si tienes 4 pelotas distintas, llamadas ball1, ball2, ball3 y ball4, y todos se comportan de la misma manera pero tienen sprites distintos, puedes hacer que ball1 sea el objeto padre de el resto. As solo ser necesario que establezcas los eventos y acciones para ball1. Las dems pelotas heredaran las caractersticas de ball1 y actuaran de la misma manera. De manera que si aplicas acciones a las instancias del objeto padre, estas tambin se aplicaran a las instancias de los objetos hijos. Por ejemplo, si destruyes las instancias del objeto ball1 tambin se destruirn las instancias de los objetos ball2, ball3 y ball4. Esta opcin nos permite ahorrar mucho tiempo y trabajo.

A menudo, los objetos deben comportarse casi idnticamente pero suelen encontrarse pequeas diferencias. Por ejemplo, un monstruo se mueve de arriba hacia abajo y otro hacia la izquierda y la derecha. En lo dems ambos monstruos poseen el mismo comportamiento. En este caso casi todos los eventos deberan poseer las mismas acciones, pero uno o dos podran llegar a ser diferentes. En este caso podemos hacer a un objeto el padre del otro. Pero tambin debemos definir algunos eventos para el objeto hijo. Estos eventos se sobrepondrn a los

eventos del padre. De forma tal que mientras un evento del objeto hijo contenga acciones, stas se ejecutarn en lugar de las del mismo evento del objeto padre. Si adems se requiere ejecutar el evento del padre, se puede 'llamar' al 'evento heredado' usando la accin apropiada. De hecho, es una buena prctica en tales casos crear un objeto base, por ejemplo un objeto ball0. Este objeto contiene todo el comportamiento por defecto pero nunca se utiliza en el juego. Todos los objetos 'reales' tienen a este objeto base como padre.

Los objetos padre pueden as mismo tener padres, y as sucesivamente. (Obviamente no est permitido crear crculos.) De sta forma se puede crear una jerarqua de objetos. Esto es extremadamente til para mantener tu juego estructurado y es ampliamente recomendado aprender a utilizar ste mecanismo. Tambin hay otra utilidad de los objetos padre. Permite heredar el comportamiento en colisiones para otros objetos. Permteme explicar esto con un ejemplo. Supongamos que tenemos cuatro objetos 'suelo' distintos. Cuando una pelota golpea el suelo sta debe cambiar su direccin. Este cambio debe especificarse en el evento colisin de la pelota con el suelo. Debido a que hay 4 distintos suelos necesitamos escribir cdigo en 4 eventos colisin distintos de la pelota. En cambio, cuando se tiene un objeto base y ste es padre de los 4 suelos reales, slo se debe especificar el evento colisin con ste objeto base. Las dems colisiones ejecutarn el mismo evento. Esto, igualmente ahorra mucho trabajo.

Tal como se indica, dondequiera que se utiliza un objeto, se involucrarn a sus descendientes. Esto sucede cuando, en una accin, se indica que sta debe aplicarse a instancias de un objeto determinado. Lo mismo sucede cuando se utiliza la sentencia with en cdigo (ver abajo). Y funciona cuando se llaman a funciones como instance_position, instance_number, etc. Finalmente, sucede cuando se hace referencia a variables en otros objetos. En el ejemplo anterior, cuando se fija la variable ball1.speed a 10 este cambio es tambin aplicado a los objetos ball2, ball3 y ball4.

Mscaras
Cuando dos instancias colisionan ocurre un evento de colisin. Para decidir cuando dos instancias se interceptan, se usan los sprites de las mismas. Esto es suficiente en la mayora de los casos, pero a veces se quiere basar las colisiones en distintas formas. Por ejemplo, si haces un juego isomtrico, los juegos tienen una altura (para darles una apariencia 3D). Pero para colisiones solo es necesario usar la parte de abajo del sprite. Esto puede lograrse creando un sprite por separado que es usado como mscara de colisin para el objeto.

Informacin
El botn Show Information nos permite ver la informacin completa del objeto que tambin puede imprimirse si se quiere. Esto es til cuando pierdes la vista de todas las acciones y eventos.

Ms acciones
En el modo avanzado hay un nmero de acciones adicionales disponibles que describiremos aqu. Estas acciones se describen con detalle en las siguientes secciones: Ms acciones de movimiento Ms acciones principales Ms acciones de control Ms acciones de dibujo Acciones de partculas Acciones extra

Ms acciones de movimiento
Algunas acciones de movimiento slo estn disponibles en el modo avanzado:

Set a path for the instance Con esta accin puedes especificar qu instancia debe seguir un path particular. Defines el path que debe seguir y la velocidad en pxeles por step. Cuando la velocidad es positiva la instancia empieza en el comienzo del path. Cuando es negativa comienza en el final. Luego especificas lo que suceder cuando se alcanza el final del path. Puedes elegir parar el movimiento, volver a empezar desde el principio, volver a empezar desde la posicin actual (que es lo mismo que volver al principio cuando el path se cierra), o el movimiento al revs. Finalmente puedes indicar que el path debe ser visto en absoluto, esto es, la posicin ser indicada en el path (esto es til cuando tienes diseado el path en un lugar en particular dentro del room) o relativa, en cual caso el punto de comienzo del path es colocado en la localizacin actual de la instancia (punto final cuando la velocidad es negativa). Consulta el captulo de paths para ms informacin.

End the path for the instance Usa esta accin para detener el path para la instancia.

Set the position on the path Con esta accin puedes cambiar la posicin actual de la instancia en el path. Deber ser un valor entre 0 y 1 (0=principio. 1= final)

Set the speed for the path Con esta accin puedes cambiar la velocidad de la instancia en el path. Una velocidad negativa mueve la instancia al revs a lo largo del path. Pon 0 para parar temporalmente el movimiento.

Perform a step towards a point Esta accin se debe poner en el evento step para que la instancia vaya hacia una posicin en particular. Cuando la instancia llega a esa

posicin no se mover ms. T especificas la posicin a mover, la velocidad con la cual se mover, es decir, el tamao del paso, y si el movimiento debe parar cuando golpea una instancia slida o cuando golpea cualquier instancia

Step towards a point avoiding objects Esta es una accin de movimiento muy til. Debe ser colocada en el evento step. Como la anterior accin hace que una instancia vaya hacia una posicin en particular. Pero en este caso este intenta de esquivar obstculos. Cuando la instancia encuentra instancia slida (o cualquier instancia) cambiar la direccin del movimiento para internar esquivar la instancia y moverse alrededor de ella. El acercamiento no est garantizado que funcione pero en los casos ms simples mover la instancia hacia la meta efectivamente. Para casos ms complicados, hay funciones de planificacin del movimiento. Especificas la posicin a mover, la velocidad y si el movimiento debe esquivar instancias slidas o cualquier instancia.

Ms acciones principales
Algunas acciones principales adicionales estn disponibles en el modo avanzado. Las siguientes acciones se agregan:

Set a time line (Slo disponible en el modo avanzado.) Con esta accin tu pones un time line particular para una instancia de un objeto e indicas el time line y la posicin donde comienza dentro del time line (0 es el principio). Puedes usar esta accin para finalizar un time line escogiendo No Time Line como valor.

Set the time line position (Solo disponible en el modo avanzado). Con esta accin puedes cambiar la posicin del time lnea actual (absoluta o relativa). Esta puede ser usada para saltar ciertas partes del time line o para repetir ciertas partes. Por ejemplo, si quieres hacer una time line que se reproduzca siempre, en el ltimo momento, agrega esta accin y pon la posicin de nuevo a 0. Puedes usarlo para esperar a que algo suceda. Slo agrega la accin de prueba y, si no es verdadera, pon la posicin relativa de la time line a -1.

Show a video Con esta accin puedes mostrar un archivo de video/pelcula. Especificas el nombre del archivo y si debe ser mostrado en pantalla completa o en la ventana. Estate seguro de que el archivo de video existe. Debes distribuirlo con tu juego o ponerlo en un datafile y exportarlo.

Replace a sprite from a file Esta accin puede ser usada para remplazar un sprite del contenido de un archivo. Indicas el sprite que quieres remplazar, el nombre del archivo (.bmp .jpg o .gif) y el nmero de sub-imgenes en el sprite cuando cargas de un archivo bmp o jpg. Para un archivo gif el nmero de sub-imgenes es automtico basado en la cantidad de sub-imgenes del archivo gif. Otras opciones para el sprite, p. Ej., si es transparente o no, no se cambian. Puedes usar esta accin para evitar almacenar todos los sprites en el mismo programa. Por ejemplo, en el comienzo de un nivel puedes reemplazar sprites por los personajes que quieres usar. NO cambies un sprite que en el momento se esta utilizando por una instancia en el room. Esto puede dar efectos indeseados con colisiones. Esta accin slo est disponible en la versin registrada.

Replace a sound from a file Con esta accin puedes remplazar un sonido por el contenido de un archivo (.wav .mid o .mp3). Especificas el sonido y el nombre del archivo. Esto evita tener que almacenar todos los sonidos en el juego. Por ejemplo, puedes usar diferentes piezas de una msica de fondo y escoger el que quieres escuchar. NO cambies de sonido mientras se est jugando. Esta accin slo est disponible en la versin registrada

Replace a background from a file Con esta accin puedes reemplazar un background por el contenido de un archivo (.bmp o .jpg). Especificas el nombre del archivo. Esto evita almacenar todos los background en el juego. No cambies un background que est visible en ese momento.Esta accin slo est disponible en la versin registrada

Ms acciones de control
Algunas acciones de control adicionales estn en el modo avanzado. Las siguientes acciones se agregan:

Execute a script Con esta accin puedes ejecutar un script que agregaste a tu juego. Especificas el script y un mximo de 5 argumentos.

Call the inherited event Esta accin es til cuando el objeto tiene un objeto padre. Esta accin llama al evento correspondiente en el objeto padre.

Ms acciones de dibujo
La siguiente accin de dibujo est disponible en el modo avanzado:

Set a font for drawing text Puedes poner la fuente que ser usada para el texto. Esta fuente debe ser uno de los recursos de fuente que tienes definido. Si eliges No Font se usar la fuente predeterminada: Arial tamao 12.

Acciones de partculas
Un sistema de acciones que se encargan de las partculas est en la pestaa Extra. Estas acciones estn disponibles slo en la versin registrada de Game Maker.

Sistema de partculas significa crear efectos especiales. Las partculas son pequeos elementos (representados por un pxel o una forma pequea). Tales se mueven segn las reglas predefinidas y cambiando de color. Muchas partculas juntas pueden crear, por ejemplo, fuegos artificiales, llamas, lluvia, nieve, etc.

Game Maker contiene un sistema de partculas que se puede alcanzar con funciones. Un sistema ms limitado de partculas se puede realizar con las acciones descritas abajo.

Un sistema de partculas puede tener partculas de diferentes tipos. Despus de crear el sistema de partculas la primera cosa a hacer es especificar los tipos de partculas. Usando las acciones de abajo puedes especificar hasta 16 tipos de partculas. Cada tipo tiene una forma, un tamao, un color inicial y otro final. El color cambia lentamente del color del comienzo al color del final. Las partculas tienen un tiempo de vida limitado. En el tipo defines el mnimo y el mximo tiempo de vida de las partculas. Tambin tienen velocidad y direccin. Finalmente, gravedad y friccin puede usarse para trabajar con partculas.

Despus de especificar el tipo de partculas debes crearlas y colocarlas en el room. Puedes hacer estallar un nmero de partculas de un tipo de partcula desde un lugar o puedes crear una corriente constante de aparicin de las partculas. Partculas aparecen en emmiters (emisores). El sistema de partculas puede tener hasta 8 emisores trabajando al mismo tiempo. Despus de crear los tipos de partculas tienes que crear los emisores y llamarlos para que estallen o fluyan.

Aqu hay un completo set de acciones. Experimenta con ellas para obtener el efecto que desees:

Create the particle system Esta accin crea el sistema de partculas. Debe ser llamada antes de que otras acciones sean usadas. Slo debes llamarla una vez. Puedes especificar el depth (profundidad) en las partculas que se estn dibujando. Si usas un depth positivo grande las partculas aparecern detrs de las instancias. Si usas una profundidad negativa aparecern delante de las instancias.

Destroy the particle system Esta accin destruye el sistema de partculas, liberando memoria. No te olvides de llamar a esta accin (p. Ej. Cuando vas a un room diferente) porque los sistemas de partculas usan mucha memoria.

Clear all particles in the system Esta acciones quita todas las partculas actualmente visibles. Esto no detiene los emisores as que nuevas partculas pueden ser creadas si tienes emisores que fluyen (lee ms abajo)

Create a type of particle Con esta accin creas un tipo de partcula. Puedes definir hasta 16 tipos distintos. Para la partcula puedes especificar la forma o el sprite

que usar. Si especificas un sprite, este ser usado. Si no seleccionas ningn sprite, la forma ser usada. Hay un nmero de interesantes formas internas. Puedes indicar el tamao mximo y el mnimo (cuando las partculas aparecen se utiliza un valor aleatorio entre estos). Finalmente especificas el aumento del tamao en cada step. Para disminuir, usa un valor negativo. Nota que nicamente un tipo de partcula es creado, no una partcula. Para esto necesitas emisores (mira abajo)

Set the color for a particle type Una partcula puede tener un color (el color predeterminado es blanco). Con esta accin puedes definir el color que se usar para un tipo en particular. Debes indicar el tipo de partcula para la que se define el color. Luego especificas cmo se aplicar el color. Cualquier color es elegido entre dos colores dados, o el color comienza con el primer color y gradualmente sobre el tiempo de vida de la partcula, cambia al segundo color. Ambos colores pueden ser dados. Finalmente puedes indicar la transparencia alpha. Especificas la transparencia en el momento que la partcula es creada y cuando muere. La transparencia cambia lentamente entre esos valores. Es normalmente lindo que se disminuya el valor del alpha sobre el tiempo de vida de la partcula.

Set the life time for a particle type Una partcula vive un nmero limitado de steps. Despus desaparece. Con esta accin pones el tiempo de vida para un tipo de partcula. Das dos valores lmites y el tiempo de vida es elegido de forma aleatoria entre ellos.

Set the motion for a particle type Con esta accin puedes poner la velocidad y direccin del movimiento para un tipo de partcula. Otra vez das 2 valores lmites y el valor ser elegido de forma aleatoria entre aquellos valores. Por ejemplo, para hacer que la partcula se mueva en una direccin aleatoria, debes dar 0 y 360 para los lmites de la direccin. Puedes tambin especificar la friccin. Esta cantidad es sustrada de la velocidad en cada step hasta que se convierta en 0. (Puedes hacer que la velocidad suba usando una friccin negativa).

Set the gravity of a particle type Con esta accin puedes poner la cantidad de gravedad y la direccin de sta para un tipo de partcula. 270 es hacia abajo.

Create secondary particles Esto es un poco ms complicado. Partculas pueden crear otras partculas durante su vida y cuando mueren. Con esta accin puedes especificar esto. Puedes definir el tipo y nmero de partculas que sern creadas en cada step durante su tiempo de vida y cuando una partcula muere. Se muy cuidadoso aqu. Puedes crear grandes nmeros de partculas de esta manera, retrasando el sistema considerablemente. Para los nmeros puedes usas tambin un valor negativo. Un valor negativo x significa que en cada step una partcula es creada con la proporcin -1/x. Por ejemplo, si quieres generar una partcula secundaria cada 4 steps, usa el valor -4. Partculas secundarias son geniales para crear efectos como colas de partculas o partculas que explotan.

Create a particle emitter Esta accin crea un emmiter (emisor de partculas). Las partculas son generadas por los emitters. Puedes tener hasta 8 emisores. Elige el emisores y especifica su forma, su tamao y posicin (en forma de una caja de contorno)

Destroy an emitter Esta accin destruye el emisor indicado. Nota que las partculas existentes que se han creado con estos emisores no son eliminadas.

Burst a number of particles from an emitter Incluso si definiste un tipo de partculas y en un emisor todava no hay partculas, tienes todava que decirle al emisor que genere partculas. Con esta accin llamas a un emisor en particular para generar un nmero de partculas de un tipo determinado. Todas esas partculas se generan una sola vez. Para el nmero puedes usar tambin un valor negativo. Un valor negativo x significa que una partcula es creada con la proporcin -1/x. Por ejemplo, si quieres general una partcula con la proporcin del 25 por cierto, usa un valor de -4.

Stream particles from an emitter Con esta accin llamas a un emisor en particular para que haga fluir un nmero dado de partculas de un tipo dado. En cada step este nmero de partculas es generado, conduciendo a una corriente continua de partculas. El emisor continuar fluyendo partculas hasta que lo destruyas o que lo llames a fluir 0 partculas. Para el nmero puedes usar un valor negativo. Un valor negativo x significa que en cada step una partcula es creada con la probabilidad -1/x. As por ejemplo, si quieres generar una partcula cada 4 steps, usa el valor de -4.

Acciones extra
En la pestaa Extra hay tambin un nmero de acciones relacionadas con tocar CDs. Estas acciones slo estn disponibles en la versin registrada de Game Maker

Play a CD Con esta accin puedes tocar diferentes pistas de un CD colocado en el lector de CDs. Especificas la pista del comienzo y la pista del final.

Stop the CD Detiene la ejecucin del CD.

Pause the CD Pausa la ejecucin actual del CD.

Resume the CD Vuelve a tocar el CD pausado.

If a CD exists in the drive Si hay un CD en la lectora de CDs la accin siguiente ser ejecutada.

If the CD is playing Si un CD est tocndose en la lectora de CDs la siguiente accin ser ejecutada.

Finalmente, hay 2 acciones adicionales que pueden ser tiles en ciertos juegos.

Set the mouse cursor Puedes usar esta accin para remplazar el cursor del ratn por un sprite. Especificas el sprite y si el cursor debe ser todava mostrado. El sprite puede ser animado. Nota que el sprite ser slo mostrado en el room, no en el rea fuera de l.

Open a webpage in a browser Puedes indicar una direccin Web en esta accin. Esta Web ser abierta en el navegador predeterminado del PC (esta accin puede actualmente tambin ser usada para abrir otros documentos). Esta accin no funciona en modo seguro.

Ms sobre las rooms


Los niveles en Game Maker tienen muchas opciones. Antes solo tratamos las ms importantes. En este captulo hablaremos sobre las opciones restantes. Cuando abres el formulario en modo avanzado se muestra de la siguiente manera:

Como vers, aparecen algunos botones nuevos en la barra de tareas. Estos son botones para ordenar las instancias vertical y horizontalmente. Esto es muy til cuando las instancias se solapan. (Cuando estamos trabajando sobre tiles estos botones se comportan de la misma manera, sobre los tiles.) Tambin hay botones para bloquear o desbloquear todas las instancias. Las instancias bloqueadas no pueden ni borrarse ni moverse. Esto te libra de borrados accidentales de instancias. Utilizando el men emergente que aparece al pulsar con el botn derecho del rato y pulsando la tecla <Ctrl> sobre una instancia, tambin puedes bloquear o desbloquear instancias individuales. Finalmente, puedes indicar si quieres una cuadrcula isomtrica. Esto es muy til cuando creas juegos en perspectiva isomtrica. Lo primero, es que las lneas de la cuadrcula se dibujaran diagonalmente. Adems el encaje de las instancias ser diferente. (El encaje trabajara mejor cuando el origen de las instancias este situado en la esquina superior izquierda que es como se sita por defecto.) Tambin tenemos dos nuevas etiquetas de las que hablaremos en los temas siguientes. Puedes encontrar ms opciones avanzadas de las rooms en los temas: Configuracin avanzada Aadiendo tiles Vistas

Configuracin avanzada
Existen an dos aspectos en la etiqueta settings que an no hemos discutido. Primero existe un recuadro etiquetado como Persistent. Normalmente, cuando abandonas un nivel (room) y vuelves despus el nivel vuelve a su configuracin inicial. Esto es adecuado cuando tienes un cierto numero de niveles en tu juego, pero no lo es tanto cuando haces juegos de otro estilo como RPGs o similares. En estos casos el nivel debera permanecer de la misma forma que cuando se abandono. Activando la opcin Persistent conseguirs que esto suceda. El estado del nivel ser recordado y cuando vuelvas despus, estar justo como cuando lo dejaste. Solo cuando reinicias el juego, el nivel volver a su configuracin inicial. Actualmente existe una excepcin a esto: Si marcas algunos objetos como persistentes, las instancias de estos objetos no permanecern en el nivel, pero se movern al siguiente. En Segundo lugar, tenemos el botn etiquetado como Creation code. Aqu puedes introducir un trozo de cdigo GML que se ejecutar cuando se crea el nivel. Esto es til cuando quieres inicializar variables para el nivel , crear determinadas instancias, etc. Esto es importante que suceda justo cuando te mueves hacia un nivel en particular. Primero, en el nivel actual (si lo hay) todas las instancias tienen un evento fin de nivel. En el siguiente nivel, todas las

instancias no persistentes son borradas. (No se genera un evento destruccin!!) Despus, para el siguiente nivel, las instancias persistentes del nivel anterior son aadidas. Todas las nuevas instancias son creadas y sus eventos de creacin son ejecutados (si el nivel no es persistente o no ha sido visitado anteriormente). Cuando estamos en el primer nivel, el evento game-start es generado para todas las instancias. Ahora, es cuando se ejecuta el evento creation code del nivel. Por ltimo, todas las instancias generan el evento room-start.

As, por ejemplo, el evento room-start puede utilizar variables inicializadas en el cdigo de creacin (creation code)para el nivel, y en dicho cdigo puedes hacer referencia a las instancias (tanto las nuevas como las persistentes) en el nivel. An hay una opcin que va ms all. En el men emergente que aparece cuando pulsas con el botn derecho del ratn con la tecla <Ctrl> pulsada, puedes indicar un cdigo de creacin para una instancia en particular. Este cdigo es ejecutado cuando comienza el nivel, justo antes del evento de creacin de la instancia sea ejecutado. Esto es muy til para, por ejemplo, iniciar ciertos parmetros que son especficos de una instancia en cuestin.

Aadiendo tiles
Tambin puedes crear fondos tileados . La razn por la que se hace esto es la siguiente: En muchos juegos, querrs tener fondos bonitos. Por ejemplo en un juego de laberintos deberan verse bien las paredes y en un juego de plataformas , los rboles, plataformas, et, debern tener un aspecto agradable. Puedes hacer esto en Game Maker definiendo muchos objetos diferentes y montando tu nivel con esos objetos. El problema esta en que esto requiere mucho trabajo, utiliza una gran cantidad de recursos y hace que el juego se ejecute ms lentamente debido a que tiene que trabajar con muchos objetos diferentes al mismo tiempo. Por ejemplo, para crear bonitas paredes en un juego de laberintos, necesitas para empezar por lo menos 15 objetos pared.

La manera estndar, utilizada en muchos juegos, es que las paredes y los dems objetos estticos sean dibujados sobre el fondo. Pero como probablemente te ests preguntando, como hace el juego para saber que un objeto golpea una pared si esta solo dibujada sobre el fondo?. El truco es el siguiente: t creas un nico objeto pared en tu juego y colocas instancias de este objeto donde tiene que haber una pared. Este objeto debe tener el tamao correcto, pero no tiene porque verse bonito. Y, aqu es donde viene el truco: lo hacemos invisible. De esta manera, cuando ests jugando el juego, no vers los objetos pared. Vers los bonitos fondos que coloques encima. Sin embargo los objetos pared continuarn all y los objetos reaccionarn a las colisiones con ellos. Puedes utilizar esta tcnica con todos aquellos objetos que no cambien su posicin. (No puedes utilizarla cuando el objeto tenga que ser animado). Para juegos de plataformas, probablemente necesites un objeto suelo y un objeto pared, pero puedes hacer bonitos fondos para que parezca que caminas sobre hierba, ramas de rboles, etc. Para aadir tiles al nivel, necesitas primero aadir un recurso de fondo a tu juego que contenga los tiles. Si quieres que tus tiles sean parcialmente transparentes, asegrate de que haces la imagen de fondo transparente. Cuando aadimos los recursos de fondo indicamos que este tiene que ser utilizado como un set de tiles. Despus indicamos el tamao de cada tile y cuando existe un espacio entre los tiles (como lo indicamos en el captulo de recursos de fondos). Ahora, cuando definimos el nivel, pulsa sobre la etiqueta tiles. Aparecer el siguiente formulario (aqu, ya hemos colocado varios tiles en el nivel).

En la esquina superior izquierda se muestra el set de tiles que estamos utilizando. Para seleccionar el set, pulsa sobre el botn men debajo de el y selecciona la imagen de fondo correcta. Ahora puedes aadir tiles seleccionando el tile que quieres arriba a la izquierda y pinchando con el ratn en la parte del nivel donde quieras colocarlo. Funciona de la misma manera que aadir instancias. Los Tiles superpuestos por otros son borrados, a no ser que deselecciones la opcin Delete underlying. Puedes utilizar el botn derecho para borrar tiles. Presiona la tecla <Shift> para aadir varios tiles y presiona <Ctrl> para moverlos. La tecla <Alt>evitara que se encajen a la cuadrcula. Tambin tienes aqu un men emergente cuando pulsas la tecla

<Ctrl> y pulsas sobre un tile con el botn derecho del ratn. Los botones de la barra de herramientas ahora borraran todos los tiles, los movern, shift all tiles, ordenarn los tiles o los bloquearn o desbloquearn. (Actualmente estn trabajando sobre la misma capa, ya lo vers ms adelante.) En determinadas situaciones, querrs aadir una parte del fondo que no tenga exactamente el mismo tamao o que consista en varios tiles. Esto puede hacerse de la siguiente manera. En la imagen de arriba a la izquierda presiona el botn izquierdo del ratn mientras mantienes pulsada la tecla <Alt>. Ahora podrs arrastrar un rea que podrs colocar despus en el nivel como cualquier otro tile. Para seleccionar varios tiles mantn pulsada la tecla <Shift>. Observa que esto solo funciona correctamente cuando no existe separacin entre los tiles. Si quieres seleccionar un rea con tiles de tamao variado, presiona la tecla <Ctrl> en lugar de la tecla Shift>. (Date cuenta de que puedes cambiar la tecla pulsada mientras estas arrastrando los tiles. A veces puede ser til.) Los tiles pueden colocarse en capas a diferentes profundidades. Abajo del todo, ves la profundidad actual de la capa. La profundidad por defecto es 1000000 con lo que esta normalmente debajo de todas las dems capas. De esta forma las instancias se mostrarn sobre los tiles. Puedes utilizar el botn Add para aadir nuevas capas, cada una a diferente profundidad. Valores de profundidad negativos pueden utilizarse para colocar los tiles encima de las instancias como imgenes frontales. Si das diferentes profundidades a los objetos podrs hacer que se siten entre las diferentes capas de tiles. Si presionas el botn Delete borrars una capa con todos sus tiles. (Siempre debe de haber al menos una capa) Si presionasChange puedes cambiar la profundidad de una capa de tiles. Si le das la misma profundidad que a otra capa, las capas se combinan. Utilizar tiles es un rasgo que debe ser utilizado tanto como sea posible. Es mucho ms rpido que utilizar objetos y las imgenes de Tiles son almacenadas una sola vez. As puedes utilizar grandes niveles creados a base de tiles con poco consume de memoria.

Vistas
Finalmente, tenemos una etiqueta llamada views. Esta contiene un mecanismo para dibujar diferentes partes de tu nivel en distintas partes de la pantalla. Aqu tenemos varios usos de las vistas. Antes de cualquier otra cosa, en determinados juegos querrs mostrar solo una parte del nivel en cada momento. Por ejemplo, en la mayora de los juegos de plataformas, la vista sigue al personaje principal. En juegos de dos jugadores, a menudo necesitaras dividir la pantalla en dos partes, una para cada jugador Un tercer uso es en los juegos en los que una parte de la pantalla utilice un scroll (la que sigue al personaje principal, por ejemplo) mientras que la otra continua esttica (como podra ser la parte en la que se contiene el marcador). Esto se puede conseguir fcilmente con Game Maker. Cuando pulsas sobre la etiqueta views aparece la siguiente informacin:

A la derecha tenemos un opcin Enable the use of Views. Debes seleccionarla si quieres utilizar las vistas. Debajo versa una lista de un total de ocho vistas que puedes definir. Debajo del listado tienes la informacin de las vistas. Lo primero es indicar cuando la vista debe ser visible al inicio del nivel. Asegrate de que al menos una vista es visible. Las vistas visibles se muestran en negrita dentro del listado. Una vista esta definida por un rea rectangular del nivel. Esta es el rea que debe verse en la vista. T especificas la posicin de la esquina superior izquierda y el ancho y alto del rea. Despus debes especificar que parte de la pantalla se destinar para mostrar la vista. Esta opcin aparece nombrada como Port on screen (lo traduciremos como lienzo para la vista, dado que la traduccin literal puerto para la vista, no resulta lo suficientemente descriptiva) . De Nuevo especificas la posicin de la esquina superior izquierda y el tamao. Si tienes una vista simple en la posicin tpica (0,0). Date cuenta de que el tamao del lienzo para la vista puede ser diferente al tamao de la vista. En ese caso, la vista se escalar para adecuarse al tamao del lienzo. (En cdigo tambin es posible rotar una vista.) Los lienzos pueden solaparse. En este caso son dibujados en el orden indicado uno encima de otro. Como se indica arriba, a menudo querrs que la vista siga a un objeto determinado. Este objeto puede ser indicado algo ms abajo. Si hay mltiples instancias de ese objeto, solo el primero en crearse ser seguido por la vista. (En GML puedes indicar a que instancia en particular debe seguir la vista.) Normalmente, el personaje ser capaz de andar algo antes de que la vista comience a moverse con el.. Solo cuando el personaje se encuentra cerca del borde de la vista, esta comenzar a moverse. Puedes especificar tambin el tamao del contorno que debe permanecer visible alrededor del objeto a seguir. Finalmente puedes restringir la velocidad con que se mueve la vista. Esto significa que el carcter puede caminar por la pantalla, pero esto le da ms suavidad al movimiento del juego. Utiliza un valor de -1 si quieres que cambie esta velocidad automticamente.

Fuentes
Cuando quieres dibujar texto en tu juego, este se muestra con la fuente Arial y un tamao de 12 puntos. Para poner textos ms trabajados, probablemente quieras utilizar diferentes Fuentes. Para crear Fuentes diferentes, debes crear recursos de Fuente. En cada recurso de fuente especificas un tipo de fuente en particular con el que puede ser utilizado en el juego utilizando la accin set a font. Para aadir un recurso de fuente utilice el tem Add Font en el men Add o utilice el botn correspondiente en la barra de herramientas. Aparecer la siguiente ventana emergente:

Como siempre debers de ponerle un nombre a tu recurso de fuente. Despus, puedes tomar el nombre de la fuente de la lista. Tambin puedes indicar el tamao y el estilo de la fuente. Date cuenta de que las Fuentes grandes necesitan mucha memoria. Te recomendamos encarecidamente que no utilices Fuentes de un tamao mayor a 32. (Es posible escalar las Fuentes durante el juego). Un ejemplo de la fuente indicada aparece en la parte inferior de la ventana. Una fuente normalmente consta de 256 caracteres,enumerados de 0 a 255. Pero en general tu solo utilizaras una pequea porcin. As que por defecto solo se guardan los caracteres del 32 al 127. Cuantos ms caracteres guardes, ms memoria necesitaras. Puedes cambiar el mapa de caracteres que se utilizar. Para ver el ndice de cada carcter, puedes utilizar el mapa de caracteres que se encuentra en la ventana de inicio de WINDOWS bajo Accesorios/Herramientas del sistema. Algunos rangos estndar pueden ser indicados utilizando los botones: El rangoNormal del 32 al 127, el rango completo All del 0 al 255,el rango numrico Digitsconteniendo solo los diez dgitos, y el rango de letras Lettersque contiene las letras maysculas y minsculas. Otros rangos pueden ser utilizados indicando los ndices del primer y ultimo carcter. Si se escribe un carcter que no esta incluido, este aparece como un espacio en blanco.

Normalmente tienes gran cantidad de Fuentes instaladas en tu ordenador, y hay webs donde puedes descargar cientos de Ellas. El problema es que cuando las utilices en tu juego puede que alguien que lo juegue no la tenga instaladas en su ordenador. Para evitar esto Game Maker guarda todas las Fuentes que quieras en los archivos de juego, Pero solo en los ejecutables. De tal forma que si das un juego ejecutable a alguien ms, no necesitas darle los archivos de fuente. Pero si le das la versin editable, esa persona podr instalrselas.

Paths
En la mayora de los juegos avanzados a menudo se suelen asignar ciertas trayectorias a las instancias. Aunque puedes conseguirlo utilizando alarmas o cdigo, es bastante complicado. Los recursos de trayectoria (path) son un mecanismo mucho ms simple. La idea es bastante sencilla: Defines una trayectoria, dibujndola. Una vez hecho esto puedes situar una accin en el evento Create del objeto para que este siga esa trayectoria en particular. En este captulo explicaremos este procedimiento al detalle.

Definiendo paths
Para aadir una trayectoria a tu juego, escoge Add Path en el men Add. Aparecer la siguiente ventana (en este ejemplo ya aadimos una pequea trayectoria):

En la parte superior izquierda puedes especificar el nombre del path. Debajo encontrars los puntos que definen el path. Cada punto tiene una posicin y velocidad asignadas (indicado con sp). Dependiendo de cmo utilices la trayectoria, la posicin puede ser absoluta o no. La instancia para la que despus utilizaras la trayectoria la seguir a ese punto especificado, o si es relativa, la instancia siempre empezar en la primera posicin del path, y lo seguir a partir de ah. La velocidad es interpretada de la siguiente manera. Un valor de 100 significa la velocidad original de la instancia. Un valor menor reduce la velocidad, un valor ms alto la incrementa (esto indica el porcentaje de la velocidad real). La velocidad debe ser interpretada de la siguiente manera: Un valor de 100 indica un 100% de la velocidad original definida para la trayectoria cuando se la asignamos a la instancia. Un valor menor, reduce esta velocidad, y un valor mayor la aumenta (siempre porcentualmente). La velocidad se interpolar entre los diferentes puntos, por lo que la velocidad cambiar de forma gradual.

Para aadir un punto presiona el botn Add. Se realizar una copia del punto seleccionado. Ahora puedes modificar la posicin y la velocidad cambiando los valores en las ventanas de edicin. Cuando seleccionas un punto en la lista, tambin puedes cambiar sus valores. Presiona Insert para insertar un nuevo punto antes del seleccionado, y Delete

para borrar el punto seleccionado. Finalmente, puedes usar Clear para borrar completamente el path.

A la derecha del formulario vers la trayectoria actual. El punto rojo indica el punto de control seleccionado. Los puntos azules, son todos los dems. El cuadrado verde indica la posicin donde comienza la trayectoria. Tambin puedes cambiar el path usando el ratn. Pulsa con el ratn sobre la imagen para agregar un punto. Pulsa sobre un punto existente y arrstralo para cambiar su posicin. Cuando mantienes <Shift> mientras pulsas el botn izquierdo del ratn, insertas un punto. Por ultimo, puedes usar el botn derecho para borrar puntos. (Date cuenta de que de esta manera no puedes cambiar la velocidad.)

Normalmente los puntos se alinean con una cuadricula. Puedes cambiar sus caractersticas en la parte superior de la barra de herramientas. tambin puedes indicar aqu si se muestra la cuadrcula o no. Si quieres posicionar un punto de forma precisa, presiona la tecla <Alt> mientras lo aades o lo arrastras.

Puedes influir la forma de la trayectoria de dos formas. Primero puedes definir el tipo de unin entre los puntos. Puedes escoger lneas rectas o curvas. En segundo lugar, puedes indicar que pasa cuando se llega al ltimo punto. Existen varias opciones. La ms comn es continuar movindose hacia el primer punto, cerrando el path (move to start). Tambin puede dejar de moverse (stop moving), saltar al primer punto (jump to start), o invertir la trayectoria (reverse). La opcin final (continue) reinicia el path desde la posicin actual. De esta manera el path va a avanzar. Slo se muestran las primeras cinco repeticiones, pero el path contina ms all.

Sobre la barra de herramientas tenemos varios controles importantes. De izquierda a derecha estas son sus funciones: El primer botn indica que estas preparado y quieres cerrar el formulario, guardando los cambios (si quieres descartar los cambios, pulsa sobre la cruz para cerrar la ventana e indica que no quieres guardarlos). El siguiente es el botn de deshacer, para corregir el ltimo cambio. Los siguientes botones te permiten borrar la trayectoria, invertir su sentido, deslizarla de un lado a otro, voltearla horizontal o verticalmente, rotarla y cambiar su tamao. Los siguientes botones son para mover la vista (no la trayectoria en si, el rea de la vista esta indicado en la barra de estado abajo del todo) y para centrarla.

Como ya hemos indicado antes, puedes definir despus los valores de la cuadrcula y cuando se muestra o no. Por ultimo, existe un botn que indica si quieres ver un fondo en particular como fondo de la trayectoria. De esta forma es fcil colocar la trayectoria en un lugar

determinado del room, como por ejemplo en una pista de carreras, de forma que las instancias puedan seguir despus la ruta correcta (esto solo se aprecia cuando utilizas trayectorias absolutas).

Asignando paths a los objetos


Para asignar una trayectoria a una instancia de un objeto, puedes asignar la accin path en algunos eventos, por ejemplo en el evento create. En esta accin debes especificar la trayectoria que quieres de una lista desplegable. Tambin hay otros dos valores que debes proporcionar.

Primero la velocidad a la que el path ser recorrido (speed) en pxeles por paso. Cuando la velocidad es positiva, la instancia comienza al principio de la trayectoria. Si es negativa, comienza al final. Recuerda que cuando defines la trayectoria tu mismo especificas la velocidad real, relativa a la velocidad indicada aqu (de forma porcentual). tambin hay una accin para cambiar la velocidad con que la trayectoria es recorrida. Puedes utilizarla para, por ejemplo, hacer que una instancia acelere o frene a lo largo de la trayectoria. Observa que la velocidad normal de la instancia es ignorada cuando se realiza la trayectoria. Tampoco la gravedad o la friccin tienen efecto sobre ella.

Ms adelante debes especificar que sucede cuando se alcanza el final de la trayectoria. Puedes elegir parar el movimiento y terminar la trayectoria, comenzar de nuevo desde el inicio (saltando de nuevo a la posicin inicial donde se inicio la trayectoria) o volver a comenzar desde la ltima posicin. Por ultimo, puedes optar por invertir la trayectoria.

Finalmente, puedes indicar si la trayectoria es absoluta o relativa. Una trayectoria absoluta es ejecutada en el lugar del nivel donde fue definida. La instancia se coloca en la posicin inicial y comienza su movimiento desde all (en la posicin final si la velocidad es negativa). Esto es til cuando, por ejemplo, tienes una pista de carreras sobre la que has definido la trayectoria. Cuando eliges una trayectoria relativa, las instancias comienzan a recorrer la trayectoria desde donde se encuentren. Esto es til cuando una instancia debe hacer una trayectoria local, por ejemplo, las naves de Space Invader pueden hacer unos giros en particular desde su posicin.

Cuando deseas colocar la instancia en un punto diferente a lo largo de la trayectoria, puedes utilizar la accin para definir la posicin dentro de la trayectoria. Una posicin dentro de la trayectoria siempre se encuentra entre 0 y 1. Un valor de 0 indica el inicio (que es lo ms comn). Un valor de 1 indica el final del path. Observa que en cada paso la variable

direction es

definida automticamente en la

direccin correcta a lo largo de la trayectoria. Puedes utilizar esta variable para orientar correctamente el sprite.

Cuando usas scripts o piezas de cdigo tienes ms control sobre la forma en que el path es ejecutado. Existe una funcin para iniciar una trayectoria para una instancia. La variable anteriormente). La variable variable

path_position indica
la velocidad la

la posicin actual del path. (Entre 0 y 1 como se indic con que se recorre la trayectoria del path. La

path_speed indica

velocidad

path_scale puede ser usada para escalar el path. Un valor

de 1 indica la escala real. Un valor mayor indica que el path ser la orientacin en que el path es recorrido

ms grande, mientras que uno menor lo reducir. La variable

path_orientation indica

(derecha o izquierda). Esto permite que puedas realizar trayectorias en diferentes orientaciones (Ej. Movindose arriba y abajo en vez de izquierda y derecha.)

Finalmente, existen muchas funciones para conocer las propiedades de las trayectorias (coordenadas X e Y por ejemplo) y existen funciones para crear nuevas trayectorias.

Tambin existen funciones que crean trayectorias libres de colisiones para que la instancia alcance una meta determinada. Lee las secciones posteriores sobre GML para ms detalles.

Tal vez te preguntes que pasa cuando la instancia colisiona con otra instancia mientras este sigue una trayectoria. Bsicamente sucede lo mismo que cuando la instancia se mueve con una velocidad determinada. Si la otra instancia es slida la instancia se detendr en la ltima posicin antes del choque. (Asumiendo que existe un evento de colisin definido.) La variable

path_position se

detendr aqu.

Cuando la instancia que se encuentra en su camino deja de interceptar la trayectoria, continuara recorrindose la trayectoria. Para manipular las trayectorias tu mismo, la variable

path_positionprevious puede

ser til. Esta variable guarda la ltima posicin

de la trayectoria y puedes definir la posicin de la trayectoria a este punto para parar el avance de la misma.

El evento path
Como se describi antes, puedes indicar que sucede cuando la instancia llega al fin de la trayectoria. En este momento se ejecuta el evento End of path. Puedes encontrarlo dentro del evento Other. Aqu puedes aadir ms acciones. Por ejemplo, podras destruir la instancia, o asignarle un path diferente.

Time Lines
En muchos juegos ciertas cosas deben pasar en ciertos lapsos de tiempo. Puedes intentar hacer esto usando el evento alarm pero cuando las cosas se vuelven muy complicadas esto podra no funcionar. Mediante el recurso time line lo puedes hacer. En una time line t especificas qu acciones deben suceder en ciertos lapsos de tiempo. Puedes utilizar todas las acciones que estn disponibles para los diferentes eventos. Cuando hayas creado una time line puedes asignarla a una instancia de un objeto. Esta instancia ejecutar las acciones en los lapsos de tiempo indicados. Permteme explicarlo con un ejemplo. Supongamos que quieres crear un guardia. Este guardia debe moverse 20 pasos a la izquierda, despus 10 arriba, 20 a la derecha, 10 hacia abajo y despus detenerse. Para lograr esto creas una time line donde empiezas con un movimiento a la izquierda. En 20 pasos pones un movimiento hacia arriba. En el paso 30 un movimiento a la derecha, en el paso 50 un movimiento hacia abajo y en el 60 detienes el movimiento. Ahora puedes asignar esta lnea de tiempo al guardia y el guardia har exactamente lo que planeaste. Tambin puedes usar una lnea de tiempo para controlar tu juego de manera global. Crea un objeto invisible, crea una time line que en ciertos momentos cree enemigos, y asgnala al objeto. Si empiezas a trabajar con esto encontrars que es un concepto muy poderoso.

Para crear una time line, selecciona Add time line del men Add. Aparecer la siguiente ventana:

Se parece un poco a la ventana de propiedades del objeto. A la izquierda puedes poner el nombre y adems hay botones para aadir y modificar moments en la time line. Enseguida est la lista de los moments (momentos). Esta lista especifica los lapsos de tiempo en steps en que las acciones asignadas van a pasar. Y enseguida est la lista de acciones para el momento seleccionado y finalmente a la derecha est la lista total de acciones disponibles. Para aadir un momento presiona el botn Add, indicando un lapso de tiempo (esto es el nmero de pasos desde que la time line comienza). Ahora puedes arrastrar acciones a la lista de manera semejante como los eventos de los objetos. Tambin hay botones para borrar el momento seleccionado, para borrar toda la time line, cambiar el momento y duplicarlo.

Finalmente existen dos botones especiales. Con el botn Merge puedes unir varios momentos en un rango deseado en uno solo. Con el botn Shift puedes cambiar todos los momentos cierta cantidad de tiempo avanzndolos o retrocedindolos la cantidad deseada. Asegrate de que no creaste momentos con un step negativo, porque nunca se ejecutarn.

Existen dos acciones relacionadas con las time lines:

Set

time

line

Con esta accin asignas una time line en particular a una instancia de un objeto. Aqu indicas la time line y la posicin de inicio de la time line (0 es al principio). Tambin puedes usar esta accin para finalizar una time line escogiendo No Time Line como valor

Set the time line position

Con esta accin puedes cambiar la posicin de la time line actual (puede ser absoluta o relativa). Esto puede ser usado para saltar ciertas partes de la time line o para repetir ciertas partes. Por ejemplo, si quieres crear una time line que se repita una y otra vez, aade esta accin en el ltimo momento para que la posicin regrese a 0. Tambin puedes usarlo para esperar a que pase algo. Slo aade la accin de prueba (usa un if) y, si no es cierta, asignas la posicin de la time line un valor relativa de -1.

Scripts
Game Maker posee un lenguaje de programacin interno. Una vez que te familiarices con Game Maker y quieras usarlo a sus mximos alcances, es prudente aprender a usar este lenguaje. Existen dos maneras para usar el lenguaje. Primero puedes crear scripts. Estos son piezas de cdigo a los que les dars un nombre. Son mostrados en el rbol de recursos y pueden ser salvados a un archivo y cargarlos desde un archivo. Pueden ser usados para formar una librera que extienda las posibilidades de Game Maker. Alternativamente, puedes aadir una accin de cdigo a algn evento y escribir una pieza de cdigo ah. Aadir el cdigo funciona exactamente de la misma manera que aadir scripts excepto por dos cosas. Las piezas de cdigo no tienen un nombre y no usan argumentos. Adems ya tienen indicados a que objeto deben aplicar el cdigo. Por lo dems escribes el cdigo de la misma manera como en los scripts. En este captulo nos vamos a concentrar a fondo en los scripts.

Como se seal antes, un script es una pieza de cdigo en el lenguaje de programacin interno que realiza una tarea especfica. Un script puede usar un nmero de argumentos. Para ejecutar un cdigo desde algn evento, puedes usar la accin script. En esta opcin especificas el script que desees ejecutar, junto con un mximo de cinco argumentos. (Tambin puedes ejecutar scripts desde una pieza de cdigo de la misma manera en que llamas una funcin. En este caso puedes usar 16 argumentos como mximo.) Cuando un script retorna un valor, puedes usarlo tambin como una funcin cuando provee valores en otras acciones.

Para aadir un script a tu juego, selecciona Add script de el men Add. Aparecer la siguiente ventana (en este ejemplo ya aadimos un pequeo script):

(Realmente, este es el editor de scripts interno. En las preferencias puedes indicar si deseas usar un editor externo.) Arriba a la derecha puedes indicar el nombre del script. Tienes un pequeo editor donde puedes escribir el script. El editor tiene varias propiedades tiles la mayora mediante botones (presiona el botn derecho del ratn para algunos comandos adicionales):

Mltiple deshacer y rehacer ya sea por tecla presionada o en grupos (puede ser cambiado en las preferencias) Sangra automtica inteligente que se alinea con la lnea previa (puede ser habilitado en las preferencias) Tabulador inteligente que hasta el primer carcter (no espacio) en la lnea previa (puede ser habilitado en las preferencias) Usa <Ctrl.+I> para aumentar la sangra en las lneas seleccionadas y <Shift><Ctrl>+I para reducirla en las lneas seleccionadas. Cortar y pegar Buscar y reemplazar Usa <Ctrl> + arriba, abajo, re-pag o av-pag para desplazarte sin cambiar la posicin del cursor. Usa F4 para abrir el script o el recurso cuyo nombre est en la posicin del cursor (no funciona en la accin de cdigo; slo en los scripts) Guardar y Cargar el script como un archivo de texto.

Tambin hay un botn con el cual puedes probar si el script est correcto. No todos los aspectos son probados, solo la sintaxis de tu script, junto con la existencia de alguna funcin usada.

Como habrs notado, partes del texto del script tienen diferentes colores. El editor reconoce la existencia de objetos, variables internas y funciones, etc. El color del cdigo ayuda bastante a evitar errores. En particular, notas inmediatamente si escribiste mal algn nombre o si usaste una keyword (una palabra con una funcin definida como var, global, other, self, etc.) como variable. Sin embargo colorear el cdigo es algo lento. En las preferencias del men file puedes activarlo o desactivarlo. Adems puedes cambiar el color para los diferentes componentes de los programas. (Si algo sale mal con el coloreado del cdigo, presiona F12 dos veces, para desactivarlo y volver a activarlo.)

Tambin puedes cambiar la fuente usada en los scripts y en las piezas de cdigo. Los scripts son extremadamente tiles para extender las posibilidades del Game Maker. Aunque esto requiere que disees tus scripts con cuidado. Los scripts pueden ser guardados en libreras que pueden ser aadidos a tu juego. Para importar una librera, usa el item Import scripts de el men file. Para guardar tu scripts como una librera usa Export scripts. Las libreras de scripts son simples archivos de texto (Aunque tienen la extensin .gml). Preferentemente no los edites directamente porque poseen una estructura especial. Algunas libreras con scripts tiles son incluidas. (Para evitar trabajo innecesario cuando cargas el juego, despus de importar una librera, es mejor borrar las libreras que no utilices.)

Cuando se crean scripts es muy fcil cometer errores. Siempre prueba los scripts usando el botn apropiado. Cuando ocurre un error durante la ejecucin del script este es reportado, junto con una indicacin del tipo de error y el lugar. Ocasionalmente vers un error con el texto "Unexpected error occurred during the game" (Ocurri un error inesperado al ejecutar el juego). Este mensaje de error indica que ha ocurrido un error en Windows o en el hardware del ordenador. Normalmente este error se debe a recursin infinita, falta de memoria o hardware, drivers o firmware insuficientes. Generalmente hablando, estos errores tienen que ver con el entorno externo a Game Maker. Si necesitas verificar las

cosas ms cuidadosamente, puedes correr el juego en debug mode (F6). En este caso aparece una ventana en la cual puedes monitorear mucha de la informacin de tu juego:

En el men Run puedes pausar el juego, correrlo paso a paso e incluso reiniciarlo. En el men Watch puedes ver el valor de ciertas expresiones. Usa Add para escribir algunas expresiones cuyos valores se mostrarn en cada paso del juego. De esta manera puedes ver si el juego est haciendo las cosas de la manera adecuada. Puedes ver varias expresiones. Puedes salvarlas para usarlos despus. (Ej. Para hacer correcciones al juego). En el men Tools se encuentran comandos para ver ms informacin. Puedes ver una lista de todas las instancias en el juego, puedes ver todas las variables globales y locales (usa el nombre del objeto o el id de la instancia.) Adems puedes ver mensajes que envas desde tu cdigo usando la funcinshow_debug_message(str). Finalmente puedes dar al juego comandos y cambiar la velocidad del juego. Si haces juegos complicados deberas aprender a usar las opciones del debug mode.

Terminando tu juego
En esta seccin veremos cmo convertir tu proyecto en un juego terminado. Aqu se describe cmo aadir archivos de ayuda al juego, configurar ciertas opciones y crear un ejecutable que pueda ser distribuido para que el juego funcione sin necesitarGame Maker. Esta seccin se divide en los siguientes temas: Informacin del juego Opciones globales del juego Consideraciones sobre la velocidad

Informacin del juego


Un buen juego provee al jugador con cierta informacin sobre como jugar el juego. Esta informacin es mostrada cuando el jugador presiona la tecla <F1> durante el juego. Para crear la informacin del juego, da doble clic en Game Information(informacin del juego) en el rbol de recursos a la izquierda de la pantalla. Se abre un pequeo editor de texto en donde puedes editar la informacin del juego. Puedes usar diferentes fuentes, diferentes colores, y estilos. Tambin puedes poner un color de fondo.

En el men File puedes fijar un numero de Options (opciones). Aqu puedes indicar el ttulo de la ventana de la informacin del juego durante el juego. Tambin puedes indicar la posicin (usa -1 para centrar la ventana) y el tamao de la ventana del game information. Puedes forzar a la ventana de la informacin para estar arriba y tambin indicar si el juego puede continuarse jugando mientras la informacin se muestra.

Una opcin interesante es mimic the main window. Cuando habilitas esta opcin la ventana de la ayuda se muestra exactamente en la misma posicin y tamao que la ventana del juego. Esto da como resultado que se vea como si el texto apareciera en la ventana del juego. Escogiendo el color de fondo apropiado provee un efecto visual agradable (podras indicar en el fondo de la ayuda que el jugador debe presionar Escape para continuar jugando.)

Un buen consejo es hacer la informacin corta pero precisa. Por supuesto puedes agregar tu nombre porque t creaste el juego. Todos los juegos de ejemplo proveen un archivo de informacin acerca del juego y de cmo fue creado.

Si quieres hacer una ayuda ms imaginativa, usa por ejemplo Microsoft Word. Y entonces seleccionas la parte que desees y usa copiar y pegar para moverlo desde Microsoft Word hacia el editor del Game Information. Para juegos ms avanzados probablemente no uses este mecanismo en todo, pero usa algunos rooms dedicados a mostrar la ayuda acerca del juego.

Opciones Globales del Juego


Existen un nmero de opciones que puedes cambiar para tu juego. Estos cambian la forma de la ventana principal, fijan algunas opciones de grficos, cambiar la imagen de cuando carga el juego, constantes e informacin sobre el creador del juego. Tambin puedes indicar aqu cuales archivos sern incluidos en el juego convertido a .exe y como los errores deben ser manipulados.

Estas opciones pueden ser encontradas haciendo doble click en Game Options en el rbol de recursos a la izquierda de la pantalla. Estas estn subdivididas en varias pestaas (Algunas funciones solo estn disponibles en el modo avanzado).

La informacin detallada se encuentran en los temas siguientes: Opciones grficas Resolucin Otras opciones Opciones de carga Constantes Incluyendo archivos en los ejecutables Opciones de error Informacin sobre el juego

Opciones grficas
En esta pestaa puedes poner un nmero de opciones que estn relacionadas con la apariencia grfica del juego. Normalmente es til comprobar los efectos de esas opciones porque pueden tener un efecto significativo en la forma en que el juego luce. Recuerda que diferentes usuarios tienen mquinas diferentes. Entonces asegrate que las opciones funcionen en las mquinas de otra gente.

Start in fullscreen mode Cuando lo habilitas el juego se ejecuta a pantalla completa; de lo contrario corre en una ventana. Scaling Aqu puedes indicar lo que suceder cuando la ventana sea ms larga que el cuarto o el juego corra en modo de pantalla completa. Hay 3 opciones. Puedes indicar un escalado fijo. El cuarto es dibujado escalado la cantidad dada en el centro de la ventana de la pantalla. 100 indica que no hay escalado. La imagen en el modo ventana debe ser escalada. Tpicamente usas el escalado cuando tus sprites y cuartos son muy pequeos. La segunda opcin es escalar el cuarto tal que llena la ventana o la pantalla pero guarda la proporcin de aspecto entre anchura y altura. La tercera opcin es escalar tal que la ventana o la pantalla est completamente llena. Esto puede conducir a la deformacin en una imagen (en particular en el modo ventana cuando el usuario puede volver a cambiar el tamao de la ventana)

Interpolate colors between pixels Cuando lo seleccionas, los colores de pxeles en sprites, fondos y tiles que no estn alineados con pxeles en la pantalla sern interpolados. Este es el caso cuando son escalados, rotados o colocados en posiciones con coordenadas no enteras (con decimales). La interpolacin hace el movimiento ms suave pero puede tambin crear un efecto borroso (tambin para tiles puede hacer que aparezcan grietas entre ellas si no diseas el cuarto cuidadosamente) Color outside the room region Cuando el cuarto no llena totalmente la ventana o la pantalla hay algunas reas que no se usan. Aqu puedes especificar el color de ese rea. Allow the player to resize the game window Cuando lo seleccionas, en el modo ventana el usuario podr cambiar el tamao de la ventana arrastrando el ratn en las esquinas de la ventana. Let the game window always stay on top Cuando lo seleccionas, en modo ventana el juego estar siempre por encima de otras ventanas. Don't draw a border in windowed mode Si lo seleccionas, el modo ventana no tendr bordes ni la barra de ttulo. Don't show the buttons in the window caption Cuando lo seleccionas en el modo ventana la barra de ttulo no mostrara los botones para minimizar, maximizar o cerrar. Display the cursor Aqu indicas si quieres que el puntero del ratn sea visible. Desactivarlo es ms rpido y agradable. (Puedes hacer fcilmente tu propio cursor con Game Maker) Freeze the game when the form looses focus Cuando lo habilitas, si el jugador pone alguna otra ventana sobre el juego (por ejemplo otro programa) el juego se congela hasta que la ventana del juego es enfocada otra vez.

Resolucin
En esta pestaa puedes fijar la resolucin de la pantalla a la cual el juego deber correr. Por defecto, la resolucin no cambia. Pero algunas veces quieres que tu juego corra en resoluciones ms bajas o quieres fijar la frecuencia del monitor para hacer que la sincronizacin trabaje correctamente. Si quieres cambiar la resolucin debes primero habilitar opcin denominado Set the resolution of the screen.

Hay tres cosas que puedes cambiar. Primero est la profundidad del color. Esto indica el nmero de bits usados para representar el color de un pxel. La mayora de las mquinas de ahora permiten 16-bit (alto color) o 32-bit (color completo) pero maquinas antiguas solo aceptan 8-bit y a veces 24-bit. Game Maker solo funciona correctamente in modo 16-bit y 32-bit dando una apariencia agradable a las imgenes pero toma mucha memoria y tiempo de procesamiento. Si quieres que tu juego corra en mquinas antiguas pon la profundidad del color a 16-bit. Si no utiliza 32-bit o directamente no la cambies.

Segundo, est la resolucin de la pantalla, el nmero de pxeles (horizontal y vertical) en la pantalla. Cambiar la resolucin es muy til cuando, por ejemplo tienes rooms muy pequeas. En este caso puede que ayude reducir la resolucin de la pantalla. Realzalo, pero sin embargo esto afectar las otras aplicaciones funcionando. Esto puede en particular dar problemas con resoluciones bajas. As, en general es mejor hacer esto slo cuando el juego corra en pantalla completa. Game Makerautomticamente cambiar la resolucin en la que estaba la mquina antes de poner el juego, cuando este termine.

Finalmente puedes cambiar la frecuencia. Esto indica cuantas veces por segundo la imagen en la pantalla se refresca. Si tu room speed es mayor que la frecuencia no todos los steps se vern. Funciona bien si la frecuencia es un mltiplo de la velocidad del room (Si especificas una frecuencia que sea demasiada alta o no disponible la frecuencia no se cambia).

Tambin hay una opcin aqu llamada Use synchronization to avoid tearing. Esto requiere cierta explicacin. La pantalla es re-dibujada un nmero de veces por segundo, dependiendo en la frecuencia de refresco. Si un room es dibujado en medio de un refresco de la pantalla, la parte superior an mostrara la imagen antigua mientras la parte de abajo muestra una nueva imagen. Esto se llama tearing. Para evitar esto puedes chequear esta opcin. En este caso la nueva imagen del room ser solamente copiada a la pantalla cuando no est ocurriendo un refresco, evitando as el tearing la mayora de veces. La desventaja es que normalmente tendremos que esperar hasta el siguiente refresco. Esto significa que el nmero mximo de frames est limitado por la frecuencia del monitor y, cuando el proceso no es lo suficientemente rpido, el framerate (velocidad de refresco del juego) inmediatamente disminuye a la mitad. Tambin puede ocurrir un conflicto entre la sincronizacin interna del juego y la sincronizacin del monitor. Si quieres hacer esto mejor pon la frecuencia del monitor a 60 y la room speed igual a 30 60.

Otras opciones
Aqu puedes fijar un nmero de opciones adicionales. Primero que todo puedes fijar un nmero de teclas predeterminadas:

Let <Esc> end the game Cuando lo habilitas, al presionar la tecla Escape termina el juego. Los juegos ms avanzados normalmente no quieren que esto pase porque talvez quieran hacer algunos procesos (como salvar) antes de terminar el juego. En este caso, deshabilita esta opcin y provee tu propia accin para la tecla escape. (Dar un clic sobre la cruz de la ventana tambin genera un evento de la tecla escape.)

Let <F1> show the game information Cuando est habilitado, presionando la tecla F1 muestra la informacin del juego.

Let <F4> switch between screen modes Si lo habilitas, la tecla F4 cambiar entre pantalla completa y el modo ventana

Let <F5> and <F6> load and save the game

Cuando est habilitado, el jugador puede usar <F5> para guardar la situacin actual del juego, y <F6> para cargar el ltimo juego guardado (Nota que solamente los datos bsicos de juegos se guardan. Una vez que utilices caractersticas avanzadas como partculas o estructuras de datos, esas opciones no se guardan y debers crear un sistema de guardado y cargado tu mismo)

Tambin puedes fijar la prioridad del proceso del juego. Esta prioridad indica cuanto tiempo de proceso se asigna al juego. En modo normal el sistema operativo trata de dar tiempo de proceso para cada proceso que lo necesite de una manera razonable. Cuando ms alta puso la prioridad es cuando mas tiempo de proceso se le asigna al juego, haciendo que corra mas suave y rpidamente. Pero otros procesos consiguen menos tiempo (tambin Windows procesa as incluso que el ratn no se puede mover ms. salo con cuidado.

Opciones de carga
Aqu puedes indicar lo que debe suceder cuando cargas el juego. Primero puedes especificar una imagen propia de cargado. Despus puedes indicar si se mostrar una barra del proceso de cargado en la parte baja de la imagen. Tienes tres opciones aqu. Que no se muestre una barra de progreso, que se muestre la barra que est por defecto o puedes especificar dos imgenes: el background (fondo) de la barra de carga y el foreground (primer plano). Puedes indicar si la barra de cargado del frente deber escalarse (predeterminado) o acortado mientras se vuelve mas largo. En el segundo caso, cercirate que la imagen es suficientemente grande como para llenar la barra. (Nota que ambas imgenes pueden ser especificadas en ese caso, no solo una)

Es posible indicar que la imagen de cargado sea transparente. En este caso el ultimo pxel abajo a la izquierda de la imagen de fondo es usado como el color transparente. Tambin la translucidez alpha puede ser indicada. Un valor de 0 significa translucidez completa. Un valor de 255 significa completamente opaco (Ambos solo funcionan bajo Windows 2000, XP o siguientes)

Segundo, puedes indicar el icono que ser usado para los juegos ya transformados a .exe. Puedes usar solo iconos de 32x32. Si intentas seleccionar otro tipo de iconos obtendrs una advertencia.

Finalmente, puedes cambiar el id nico del juego. Este id se va a usar para registrar los puntajes ms altos y los juegos salvados. Si t liberas una nueva versin de tu juego y no quieres usar los puntajes anteriores, debes cambiar este nmero.

Constantes
Bajo esta pestaa puedes definir las constantes globales que puedes ser usadas en scripts y en piezas de cdigo, o como valores para acciones. Cada constante tiene un nombre y un valor. Los nombres deben seguir las mismas reglas que las variables, es decir, deben empezar con una letra o un guin bajo y seguido de letras, dgitos o guiones bajos. Te recomiendo que hagas tus constantes fcilmente distinguibles. Una convencin generalmente es utilizar solo maysculas y guiones bajos.

El valor de una constante deber ser una expresin constante. Esto es, debe ser un nmero constante, una cadena de texto (con comillas alrededor) o una expresin. La expresin es evaluada antes de que cualquier cosa suceda en el juego. Por ejemplo no puedes referirte al room actual, instancias, o scripts. Pero puede contener constantes internas y los nombres de los recursos.

Puedes aadir una constante usando el botn Add y borrarlo usando Delete Puedes cambiar un nombre de una constante o el valor haciendo un clic en l. Hay tambin botones para borrar todas las constantes o clasificarlas por nombre.

Incluyendo archivos en los ejecutables


Como se ha indicado antes puedes crear la versin .exe de tu juego. A veces tu juego utilizar archivos adicionales. Por ejemplo, puede que desees incluir archivos de video o archivos de texto que se usarn en el juego. En muchos casos querrs agregar DLLs o imgenes y sonidos que se agreguen durante el funcionamiento del juego. Puedes proveer estos junto al ejecutable pero a veces es mas fcil incluirlos dentro del juego. De esta manera, slo necesitas distribuir 1 solo archivo.

Aqu puedes indicar los archivos que quieres incluir en el ejecutable. Arriba del formulario hay una lista de archivos a incluir. Usa Add para seleccionar los archivos y agregarlos a la lista (puedes seleccionar mltiples archivos simultneamente). UsaDelete o Clear para quitar archivos de la lista. (Observa que en el archivo .gm6 no se encuentran los archivos, solo los nombres. Si envas a alguien el archivo .gm6 debern enviar tambin los archivos incluidos)

Los archivos en la lista se empaquetan en el ejecutable que es creado. Cuando el juego corre ellos se desempaquetan y pueden accederse a ellos dentro del juego. Es importante darse cuenta de dnde sucede esto. Hay 2 posibilidades que puedes elegir. En la situacin predeterminada los archivos son desempaquetados en la carpeta donde esta el .exe. As el juego puede utilizar el nombre del archivo para acceder a ellos directamente (no se necesita decir la ruta). Esto funciona bien si el .exe se guarda en el disco duro pero fallar si se almacena en un dispositivo de slo lectura como un CD.

La segunda posibilidad es indicar que el archivo debe ser desempaquetado dentro de un una carpeta temporal que es creada durante el funcionamiento del juego. Si seleccionas esta opcin necesitars proveer la ruta a la carpeta temporal cuando uses el nombre del archivo durante el juego. Esta ruta puede obtenerse usando la variable interna Por ejemplo, para ver un archivo de video debes hacer esto:

temp_directory. No olvides aadir el signo \ en este caso.

{ show_video(temp_directory+'\pelicula.avi',true,true); }
Asegrate de que la carpeta temporal sea eliminada cuando el juego termine. As, no puedes almacenar juegos guardados o informacin especial en este caso. Elige esta opcin cuando el juego tenga que correr desde un CD o cuando no deseas crear ni alterar ningn archivo durante el juego.

Si un archivo que se desempaqueta ya existe, el archivo no se sobreescribe. Puedes cambiar este comportamiento seleccionando Overwrite existing files (sobreescribir archivos existentes) Tambin, cuando el juego termina los archivos no son eliminados (a menos que estn en la carpeta temporal que se eliminaa totalmente). Puedes cambiar esto seleccionando Remove at game end.

Aviso: Si ests testeando tu juego, el directorio de trabajo ser aqul en el que se encuentra el archivo .gm6 del juego. Si los archivos que incluyes en el juego estn guardados en este mismo directorio y seleccionas la opcin Remove at game endpuede que se eliminen completamente! As que es mejor que no guardes los archivos que vayas a incluir en el mismo directorio que el .gm6.

Opciones de error
Aqu especificas algunas opciones relativas a la manera en que los errores son reportados:

Display error messages Si lo habilitas, los mensajes de error se muestran al jugador. En la versin final de tu juego deberas deshabilitar esta opcin.

Write error messages to file

game_errors.log game_errors.log en la carpeta del juego.

Si lo seleccionas, todos los mensajes de errores son escritos en un archivo llamado

Abort on all error messages Normalmente ciertos errores son fatales, mientras otros pueden ser ignorados. Cuando habilitas esta opcin todos los errores son considerados fatales y el juego es terminado. En la versin final del juego deberas habilitar esta opcin.

Treat uninitialized variables as 0 Un error comn es utilizar una variable antes de que tenga un valor asignado. Algunas veces esto es difcil de evitar. Cuando habilitas esta opcin, las variables sin inicializar no reportarn un error pero se les asignar el valor de 0. Aunque debes tener cuidado. Esto significar que ya no sers informado de errores de escritura.

Informacin sobre el juego


Aqu indicas el nombre del autor del juego. La versin del juego, y alguna informacin acerca del juego. Adems se mantiene la fecha de la ltima modificacin. Esto es til si ests trabajando con varias personas en un juego o haciendo una nueva versin. Esta informacin no es accesible mientras se ejecuta el juego.

Consideraciones sobre la velocidad


Si ests haciendo juegos complicados probablemente quieras hacer que corran lo ms rpido posible. Aparte de que Game Maker hace que el juego corra lo ms rpido posible, mucho depende en cmo disees el juego. Adems es muy fcil crear juegos que utilicen mucha memoria. En este captulo te dar algunas sugerencias sobre cmo hacer tus juegos ms rpidos y de tamao pequeo.

Antes de nada, mira cuidadosamente los sprites y fondos que utilices. Sprites animados usan mucha memoria y dibujar muchos sprites toma mucho tiempo. Haz tus sprites lo mas pequeo posible. Saca cualquier rea invisible alrededor de el (el comando crop en el editor de sprites lo hace automticamente). Lo mismo aplica para los los fondos. Si tienes un fondo que cubre toda la pantalla, asegrate de desactivar la opcin de color de fondo.

Si utilizas el modo pantalla completa, asegrate de que el tamao del room (o ventana) no sea mayor que el tamao de la pantalla. La mayora de las tarjetas de video pueden eficientemente aumentar a escala las imgenes, pero reducir a escala es lento. Finalmente, si es posible, desactiva el cursor. Esto hace lentos los grficos.

Tambin ten cuidado con el uso de muchas views. Por cada view el room se vuelve a dibujar.

Aparte de los grficos, otros aspectos influyen en la velocidad. Asegrate de tener la menor cantidad de instancias como sea posible. En particular, destruye los objetos que ya no sean requeridos (Ej. cuando abandonan el cuarto). Evita mucho cdigo en el evento step o en el evento draw de los objetos. Frecuentemente las cosas no necesitan ser verificadas en cada paso. La interpretacin del cdigo es razonablemente rpida, pero esto es interpretado. Adems, algunas funciones y acciones toman mucho tiempo; en particular cuando tiene que verificar todos los objetos (como por ejemplo, la accin de rebote).

Piensa acerca de donde utilizar los eventos de colisin. Normalmente tienes dos opciones. Los objetos que no tienen eventos de colisin son tratados mucho ms rpidos, entonces utilzalos en los objetos que tengan pocas instancias.

Ten cuidado con el uso de archivos de sonido muy grandes. Necesitan mucha memoria y adems se comprimen muy mal. Deberas verificar tus sonidos y ver si puedes detenerlos.

Finalmente, si quieres hacer un juego que mucha gente pueda jugar, asegrate de poder probarlo en mquinas viejas.

El Lenguaje Game Maker (GML)


Game Maker posee un lenguaje propio de programacin. Este lenguaje te da mucha ms flexibilidad y control que las acciones normales. Este lenguaje se llama Lenguaje Game Maker (GML). En esta seccin describiremos el GML y daremos un vistazo a las cerca de 1000 funciones y variables disponibles para controlar todos los aspectos de tu juego. Esta seccin se divide en los siguientes temas: Estructura general del GML Haciendo clculos Game Play Interaccin con el usuario Grficos del juego Msica y sonido Ventanas, highscores y otros pop-ups Recursos Modificando los recursos Archivos, registro y ejecucin de programas Estructuras de datos Creando partculas Juegos multijugador Usando DLLs Grficos 3D

Estructura general del GML


Como habrs ledo antes, el Game Maker contiene un lenguaje de programacin interno. Este lenguaje te da mucha ms flexibilidad y control que las acciones estndar. Nos referiremos a este lenguaje como el GML (de Game Maker Language). Hay diferentes lugares en los que puedes escribir programas con este lenguaje. El primero, cuando defines scripts. Un script es un programa en GML. Segundo, cuando agregas una accin de cdigo a un evento. En una accin de cdigo debes escribir un programa en GML. Tercero, en el room creation code. Y finalmente, en cualquier momento que necesites especificar algn valor en una accin, puedes tambin emplear una expresin en GML. Una expresin, como veremos ms adelante no es un programa completo, sino una pieza de cdigo que devuelve un resultado.

En este captulo describiremos la estructura bsica de los programas en GML. Cuando desees usar programas en GML, se debe tener cuidado con ciertos aspectos. Primero que nada, para todos tus recursos (sprites, objetos, sonidos, etc.) debes emplear nombres que inicien con una letra y que slo consistan de letras, nmeros y el guin bajo "_". De otra forma no podrs referirte a ellas desde el programa. Mantente seguro que todos los recursos tengan nombres diferentes, tambin ten cuidado de no nombrar a tus recursos self, other, global o all porque estas son palabras que tienen un significado especial dentro del lenguaje. Tampoco debes usar ninguna de las palabras reservadas indicadas a continuacin. La estructura bsica del GML se trata con detalle en los siguientes captulos: Un programa Variables Asignaciones Expresiones Variables extra Accediendo a variables en otras instancias Arrays Sentencia If Sentencia Repeat Sentencia While Sentencia Do Sentencia For Sentencia Switch Sentencia Break Sentencia Continue Sentencia Exit Funciones Scripts Construcciones With Comentarios Funciones y variables en GML

Un programa
Un programa consiste de un sistema de instrucciones, llamados sentencias. Un programa debe comenzar con el smbolo { y terminar con el smbolo } . Las sentencias deben separarse con el smbolo ';'. La estructura global de todo programa es:

{ <sentencia >; <sentencia >; ... }


Hay un nmero de diferentes tipos de sentencias, de las cuales vamos a ver ms abajo.

Variables
Como en cualquier lenguaje de programacin, el GML contiene variables. Las variables son las posiciones de memoria que guardan la informacin. Las variables pueden almacenar valores reales o cadenas de texto. Las variables no necesitan ser declaradas como en otros lenguajes. Hay un gran nmero de variables internas. Algunas son generales, como mouse_x y mouse_y, las cuales indican la posicin actual del cursor, mientras otras son locales para la instancia del objeto para el cual se ejecuta el programa, como x e y que indican la posicin actual de la instancia. Una variable tiene un nombre que debe iniciar con una letra, y puede contener slo letras, nmeros, y el smbolo _ (La longitud mxima es de 64 caracteres). Cuando haces uso de una nueva variable, sta es local para la instancia actual y no es conocida en los programas de otras instancias (an del mismo objeto), aunque existe la posibilidad de hacer referencia a variables de otras instancias; mira ms abajo para mayor informacin.

Asignaciones
Una asignacin pasa el valor de una expresin a una variable. Una asignacin tiene la siguiente forma:

<variable> = <expresin>;

Una expresin puede ser un simple valor pero tambin puede ser ms complicada. Adems de asignar un valor a una variable, tambin se le puede sumar usando +=, restar usando -=, multiplicarla usando *=, dividirla usando /=, o usando |=, &\ o ^=.

Expresiones
Las expresiones pueden ser nmeros reales (p. Ej. 3.4), nmeros hexadecimales, comenzando con el signo $ (p. Ej. $00FFAA), cadenas entre comillas simples o dobles (p. Ej. hola o hola) u otras ms complicadas. Para las expresiones, existen los siguientes operadores binarios (en orden de prioridad):

&&, ||: funciones Booleanas (&& para la funcin and, || para la funcin) <, <=, ==, !=, >, >=: comparaciones, el resultado es true (1) o false (0)

| & ^: operadores de bit (| = bitwise or, & = bitwise and, ^ = bitwise xor) << >>: operadores de bit (<< = shift left, > > = shift right) +, -: adicin, sustraccin *, /, div, mod: multiplicacin, divisin, divisin entera y mdulo.

Nota que el valor operador

x div y

es el valor de

x/y redondeado en la direccin de cero al nmero entero ms cercano. El x (x div y) * y.

mod devuelve el resto obtenido dividiendo sus operandos. En otras palabras, x mod y =

Tambin, los operadores de bit existen:

!: not, convierte un valor verdadero en falso y uno falso en verdadero -: cambio de signo ~: cambio de signo de bit

Como valores se pueden emplear nmeros, variables o funciones que devuelvan algn valor. Las sub-expresiones se pueden colocar entre parntesis. Todos los operadores funcionan para valores reales. Las comparaciones tambin funcionan para las cadenas y el + concatena cadenas.

Ejemplo Aqu hay un ejemplo con algunas asignaciones

{ x = 23; color = $FFAA00; str = 'hola mundo'; y += 5; x *= y; x = y << 2; x = 23*((2+4) / sin(y)); str = 'hola' + " mundo"; b = (x < 5) && !(x==2 || x==4); }

Variables extra
Puedes crear nuevas variables al asignndoles un valor (no es necesario declararlas antes). Si simplemente usas un nombre de variable, la variable ser almacenada slo para la instancia actual. Por lo que no esperes encontrarla cuando manejes otro objeto (u otra instancia del mismo objeto). Tambin se puede cambiar y leer variables de otros objetos colocando el nombre del objeto con un punto antes del nombre de la variable.

{ if (global.hacer) { // hacer cualquier cosa global.hacer = false; } }


A veces quieres variables que solo estn dentro del actual piece of code o de un script. De esta manera evitas perder memoria y ests seguro que no hay ningn conflicto con los nombres. Esto es tambin ms rpido que usar variables globales. Para hacer esto debes declarar las variables en el comienzo del cdigo, usando la palabra var. Esta declaracin se ve as:

var <nombrevariable1>,<nombrevariable2>,<nombrevariable3>, ...


Por ejemplo, puedes escribir:

{ var xx,yy; xx = x+10; yy = y+10; instance_create(xx,yy,pelota); }

Accediendo a variables en otras instancias


Como se dijo antes, puedes alterar variables en la instancia actual usando sentencias como:

x = 3;

Pero en ciertos casos querrs acceder a variables en otra instancia. Por ejemplo, para detener el movimiento de todas las pelotas, o para mover al personaje principal a cierta posicin, o, en el caso de una colisin, cambiar el sprite de la otra instancia involucrada. Esto puede lograrse antecediendo el nombre del objeto y un punto al nombre de la variable. As por ejemplo, puedes escribir:

pelota.speed = 0;

Esto cambiar la velocidad de todas las instancias del objeto pelota. Hay ciertos objetos especiales.

self: La instancia actual para la que estamos ejecutando la accin other: La otra instancia involucrada en un evento de colisin all: Todas las instancias noone: Ninguna instancia (tal vez te parezca raro pero puede ser til como veremos ms adelante) global: : No es precisamente una instancia, sino un contenedor que almacena variables globales

Por ejemplo, puedes usar las siguientes sentencias:

other.sprite_index = sprite5; all.speed = 0; global.message = 'Un buen resultado'; global.x = pelota.x;

Ahora tal vez te ests preguntando lo que la ltima tarea realiza cuando hay ms de una pelota. Bien, se toma la primera y su valor x es asignado al valor global.

Pero qu tal si deseas establecer la velocidad de una pelota en particular, en lugar de la de todas ellas. Esto es un poco ms difcil. Cada instancia tiene un id nico. Cuando colocas instancias en un cuarto en el diseador, este id se muestra cuando colocas el ratn sobre la instancia. Estos nmeros son mayores o iguales a 100000. Puedes emplear estos nmeros como la parte a la izquierda del punto. Pero ten cuidado, el punto ser interpretado como el punto decimal en el nmero. Para evitarlo, colcalo entre parntesis. As por ejemplo, asumiendo que el id de la pelota es 100032, puedes escribir:

(100032).speed = 0;
Cuando creas una instancia en el programa, la llamada devuelve su id. Una pieza de programa vlido es:

{ nnn = instance_create(100,100,pelota); nnn.speed = 8; }

Esto crea una pelota y establece su velocidad. Nota que hemos asignado el id de la instancia a una variable y usamos esta variable como indicacin antes del punto. Esto es completamente vlido. Djame explicarlo un poco mejor. Un punto es de hecho, un operador. Toma un valor como el operador de la izquierda y una variable (direccin) como el operador de la derecha, y devuelve la direccin de esta variable en particular para el objeto o instancia indicados. Todos los nombres de objetos, y los objetos especiales nombrados antes representan valores y pueden ser tratados como con cualquier otro valor. Por ejemplo, el siguiente programa es vlido:

{ obj[0] = pelota; obj[1] = bandera; obj[0].alarm[4] = 12; obj[1].id.x = 12; }

La ltima sentencia debiera interpretarse como sigue. Tomamos el id de la primera bandera. Para la instancia con ese id establecemos a 12 su coordenada x. Los nombres de objetos, objetos especiales y los id de las instancias pueden tambin emplearse en otros programas.

Arrays
Puedes emplear arrays de una o dos dimensiones en el GML. Simplemente coloca el ndice entre corchetes cuadrados para un array unidimensional, y los dos ndices con una coma entre ellos para los arrays bidimensionales. En el momento en que emplees un ndice el array es generado. Cada array inicia en el ndice 0. Por lo que debes tener cuidado al usar ndices muy grandes ya que se ocupar memoria para un array grande. Nunca emplees ndices negativos. El sistema coloca un lmite de 32000 para cada ndice y 1000000 para el tamao total. Por ejemplo, puedes escribir lo siguiente:

{ a[0] = 1; i = 1; while (i < 10) { a[i] = 2*a[i-1]; i += 1;} b[4,6] = 32; }

Sentencia If
Una sentencia If tiene esta forma

if (<expresin>) <sentencia >


o

if (<expresin>) <sentencia> else <sentencia >

La sentencia tambin puede ser un bloque. La expresin se evaluar. Si el valor (redondeado) es <=0 (false) se ejecuta la sentencia despus del else, de otra forma (true) se ejecuta la otra sentencia. Es un buen hbito colocar siempre corchetes a las sentencias en la sentencia if. Por lo que mejor usa

if (<expresin>) { <Sentencia > } else { <Sentencia > }


Ejemplo El siguiente programa mueve el objeto hacia el medio de la pantalla.

{ if (x<200) {x += 4} else {x -= 4}; }

Sentencia Repeat
Una sentencia repeat tiene esta forma

repeat (<expresin>) <sentencia >


La sentencia es repetida el numero de veces indicado por el valor redondeado de la expresin.

Ejemplo El siguiente programa crea 5 pelotas en posiciones aleatorias.

{ repeat (5) instance_create(random(400),random(400),pelota); }

Sentencia While
Una sentencia While tiene esta forma

while (<expresin>) <sentencia>

Mientras la expresin sea verdadera, la sentencia (que puede tambin ser un bloque) es ejecutada. Ten cuidado con tus ciclos while. Puedes fcilmente hacer que se repitan eternamente, en cuyo caso el juego se bloquear y ya no responder a los comandos del usuario.

Ejemplo El siguiente programa trata de colocar el objeto actual en una posicin libre (esto es casi lo mismo que la accin para mover un objeto a una posicin aleatoria).

{ while (!place_free(x,y)) { x = random(room_width); y = random(room_height); } }

Sentencia Do
La sentencia Do tiene esta forma:

do <sentencia> until(<expresin>)

La sentencia (que puede tambin ser un bloque) es ejecutada hasta que la expresin sea verdadera. La sentencia se ejecuta por lo menos una vez. Ten cuidado con los ciclos do. Puedes fcilmente crear uno que se repita indefinidamente, en cuyo caso el juego se bloquear y ya no responder a los eventos generados por el usuario.

Ejemplo El siguiente programa intenta colocar el objeto actual en una posicin libre (esto es lo mismo que mover un objeto en una posicin aleatoria)

{ do { x = random(room_width); y = random(room_height); } until (place_free(x,y))

Sentencia For
Una sentencia For tiene esta forma:

for (<sentencia1> ; <expresin> ;<sentencia2>) <sentencia3>

Funciona de la manera siguiente. Primero se ejecuta la sentencia1. Entonces se evala la expresin. Si es verdadera, se ejecuta la sentencia3; entonces la sentencia2 y luego se evala nuevamente la expresin. Esto contina hasta que la expresin sea falsa.

Puede sonar complicado. Debes interpretarlo de la manera siguiente. La primera sentencia inicializa el ciclo for. La expresin prueba si el ciclo debiera terminar. La sentencia2 es la sentencia de paso hacia la evaluacin del siguiente ciclo.

El uso ms comn es para llevar un contador hasta cierto valor.

Ejemplo El siguiente programa inicializa un array llamada lista de longitud 10 con los valores 1-10.

{ for (i=0; i<=9; i+=1) lista[i] = i+1; }

Sentencia Switch
En ciertas situaciones querrs llevar a cabo alguna accin dependiendo de un valor en particular. Puedes lograrlo empleando varias sentencias if pero es ms sencillo si empleas la sentencia switch. Una sentencia switch tiene la siguiente forma:

switch (<expresin>) { case <expresin1>: <statement1>; ... ; break; case <expresin2>: <statement2>; ... ; break; ... default: <statement>; ... }

Funciona as: primero se ejecuta la expresin. Despus se compara con los resultados de las diferentes expresiones delante de las sentencias case. La ejecucin contina despus de la sentencia case con el valor correcto, hasta que se encuentre una sentencia break. Si no se encuentra una sentencia case con el valor correcto, la ejecucin contina despus de la sentencia default. (No es necesaria la sentencia default. Nota que se pueden colocar mltiples sentencias case para la misma sentencia. Tambin, no es necesaria la sentencia break. Si no existe una sentencia break, la ejecucin simplemente contina con el cdigo para la siguiente sentencia case.

Ejemplo El siguiente programa lleva a cabo una accin segn la tecla que se presione.

switch (keyboard_key) { case vk_left: case vk_numpad4: x -= 4; break; case vk_right: case vk_numpad6: x += 4; break; }

Sentencia Break
La sentencia Break tiene esta forma:

break
Si se emplea en un ciclo for, while, repeat, en una sentencia switch o with, finaliza el ciclo o sentencia. Si es empleada fuera de una de estas sentencias finaliza el programa no el juego).

Sentencia Continue
La sentencia Continue tiene esta forma

continue

Si se emplea dentro de un ciclo for, while, repeat o con una sentencia with, continua con el siguiente valor del ciclo for o de la sentencia with.

Sentencia Exit
La sentencia Exit tiene esta forma:

exit

Simplemente termina la ejecucin del programa/script actual. (No termina la ejecucin del juego! Para ello necesitas la funcin game_end(); ver ms abajo)

Funciones
Una funcin tiene la siguiente estructura: nombre de la funcin, seguido por uno o varios argumentos entre parntesis, separados por comas (tambin puede no incluir ningn argumento).

<funcin>(<arg1>,<arg2>,...)
Hay dos tipos de funciones. En primer lugar, tenemos una gran cantidad de funciones internas, para controlar todos los aspectos del juego. Despus, cualquier scipt que definas en el juego puede ser usado como una funcin.

Nota que para una funcin sin argumentos an se necesitan los parntesis. Algunas funciones devuelven valores y pueden ser empleadas en expresiones. Otras simplemente ejecutan rdenes.

Nota que es imposible usar una funcin como el lado izquierda de una asignacin. Por ejemplo, no puedes escribir escribir

instante_nearest(x,y,obj).speed = 0.

En lugar, debes

(instance_nearest(x,y,obj)).speed = 0.

Scripts

Cuando creas un script, querrs tener acceso a los argumentos enviados a l (ya sea cuando uses una accin script, o cuando llames al script como una funcin desde un programa u otro, o inclusive desde el mismo script). Estos argumentos se almacenan en las variables argument0, argument1, , argument15. Por lo que puede haber como mximo 16 argumentos. (Nota: cuando se llama un script desde una accin, slo se pueden especificar los primeros 5 argumentos). Pueden usar tambin argument[0], etc.

Los scripts tambin pueden devolver un valor, por lo que pueden ser empleados en expresiones. Para ello debes emplear la sentencia return:

return <expresin>
La ejecucin del script termina en la sentencia return!

Ejemplo Aqu esta la definicin de un script que calcula el cuadrado del argumento:

{ return (argument0*argument0); }

Para llamar un script desde una pieza de cdigo, solo hazlo como cuando se hacen las llamadas a funciones. Esto es, escribe el nombre del script con sus argumentos entre parntesis.

Construcciones With

Como se indic antes, es posible leer y cambiar el valor de las variables en otras instancias. Pero en ciertos casos querrs hacer mucho ms con esas otras instancias. Por ejemplo, imagina que deseas mover todas las pelotas 8 pxeles hacia abajo. Pudieras pensar que eso se logra con el siguiente cdigo

pelota.y = pelota.y + 8;
Pero no es correcto. El valor a la derecha de la asignacin obtiene la coordenada y de la primera pelota y le suma 8. Entonces este nuevo valor se toma como la coordenada y para todas las pelotas. Por lo que el resultado es que todas las pelotas tienen la misma coordenada y. La sentencia

pelota.y += 8;
tendr exactamente el mismo efecto porque es simplemente una abreviatura de la primera declaracin. Entonces, cmo logramos esto? Para ello existe la declaracin with. Su forma general es

with (<expresin>) <sentencia>


<expresin> indica una o ms instancias. Para esto puedes emplear el id de la instancia, o el nombre de un objeto (para indicar todas las instancias de este objeto) o uno de los objetos especiales (all, self, other, noone). <declaracin> se ejecuta para cada una de las instancias indicadas, como si la instancia fuera la instancia (self) actual. As, para mover todas las pelotas 8 pxeles hacia abajo, puedes escribir

with (pelota) y += 8;

Si deseas ejecutar mltiples declaraciones, colcalas entre corchetes. Por ejemplo, para mover todas las pelotas a una posicin aleatoria, puedes usar

with (pelota) { x = random(room_width); y = random(room_height); }

Nota que, dentro de las sentencias, la instancia indicada se ha vuelto la instancia self. Entonces, la instancia self original ahora es la instancia other. As, por ejemplo, para mover todas las pelotas a la posicin de la instancia actual, puedes usar

with (pelota) { x = other.x; y = other.y; }

El uso de la declaracin with es muy poderoso. A continuacin te muestro unos cuantos ejemplos ms. Para destruir todas las pelotas usas

with (pelota) instance_destroy();


Si una bomba explota y tu quieres destruir todas las instancias cercanas a ella puedes usar

with (all) { if (distance_to_object(other) < 50) instance_destroy(); }

Comentarios
Puedes agregar comentarios a tus programas. Todo en una lnea despus de // no se ejecuta. Puedes hacer tambin una multi-lnea de comentarios colocando el texto entre /* y */.

Funciones y variables en GML

El GML contiene un gran nmero de funciones y variables internas. Con ellas puedes controlar cualquier parte del juego. Para todas las acciones existe una funcin correspondiente por lo que de hecho no necesitas emplear ninguna accin si prefieres emplear cdigo. Pero hay muchas ms funciones y variables que controlan aspectos del juego que no se pueden acceder slo empleando acciones. Por lo que si deseas crear juegos ms avanzados se te recomienda leer los siguientes captulos para tener un panorama general de todo lo que es posible lograr. Por favor nota que estas variables y funciones pueden tambin emplearse cuando se envan valores para las acciones. Por lo que an si no planeas emplear cdigo o escribir algn script, an obtendrs beneficios de esta informacin.

En los captulos siguientes se emplean las siguientes convenciones. Los nombres de variables marcados con un * son slo de lectura, es decir, no se puede cambiar su valor. Los nombres de variables con [0...n] despus de ellos son arrays. Se da el intervalo posible de sus ndices.

Haciendo clculos
Game Maker contiene un gran nmero de funciones para realizar determinadas tareas. Aqu tienes una lista completa de estas funciones.

Esta seccin est dividida en los temas: Constantes Funciones de valores reales Funciones de cadenas de texto Trabajando con el tiempo y la fecha

Constantes
Game Maker incluye las siguientes constantes matemticas:

true equivale a 1. false


equivale a 0.

pi equivale a 3.1415...

Funciones de valores reales


Estas son las funciones disponibles para trabajar con nmeros reales:

random(x) Devuelve un valor entre 0 y X. El valor devuelto es siempre menor que X. choose(val1,val2,val3,...) Devuelve uno de argumentos de forma aleatoria. La funcin acepta un mximo de 16
argumentos.

abs(x) Devuelve el valor absoluto de X. sign(x) Devuelve el signo de X (-1, 0 o 1). round(x) Devuelve el valor de X
redondeado al valor entero ms cercano.

floor(x) Devuelve el valor de X redondeado hacia abajo. ceil(x) Devuelve el valor de X redondeado hacia arriba. frac(x) Devuelve la parte fraccional de X, sqrt(x) Devuelve la raz cuadrada de X. sqr(x) Devuelve el cuadrado de X. power(x,n) Devuelve X elevado a la potencia N. exp(x) Devuelve
E elevado a X. que es la parte situada tras el punto decimal.

El valor no debe ser negativo.

ln(x) Devuelve el logaritmo neperiano (natural) de X. log2(x) Devuelve el logaritmo en base 2 de X. log10(x) Devuelve el logaritmo en base 10 de X. logn(n,x) Devuelve el logaritmo en base N de X.

sin(x) Devuelve el seno de X (X en radianes). cos(x) Devuelve el coseno de X (X en radianes). tan(x) Devuelve la tangente de X (X en radianes). arcsin(x) Devuelve el arcoseno de X. arccos(x) Devuelve el arcocoseno de X. arctan(x) Devuelve la arcotangente de X. arctan2(y,x)
Calcula la arcotangente de (Y/X), y devuelve un ngulo en el cuadrante correcto.

degtorad(x) Convierte grados a radianes. radtodeg(x) Convierte radianes a grados. min(val1,val2,val3,...) Devuelve el menor de los valores. La funcin soporta 16 argumentos. Deben ser todos nmeros
reales o cadenas de texto.

max(val1,val2,val3,...) Devuelve el mayor de los valores. La funcin soporta 16 argumentos. Deben ser todos nmeros
reales o cadenas de texto.

mean(val1,val2,val3,...) Devuelve el promedio de los valores. La funcin soporta 16 argumentos. Deben ser todos nmeros
reales.

median(val1,val2,val3,...) Devuelve el valor intermedio de los argumentos introducidos. (Cuando el nmero de


argumentos es parejo, el menor de los dos valores intermedios, es el que devuelve la funcin. La funcin soporta 16 argumentos. Deben ser todos nmeros reales.

point_distance(x1,y1,x2,y2) Devuelve la distancia existente entre el punto situado en (x1,y1) y el situado en (x2,y2). point_direction(x1,y1,x2,y2) Devuelve la direccin desde el punto (x1,y1) hacia el punto (x2,y2) en grados. lengthdir_x(len,dir) Devuelve la componente horizontal (x) del vector determinado por lengthdir_y(len,dir) Devuelve la componente vertical (y) del vector determinado por is_real(x) Averigua cuando X es un valor real.
(diferencindolo de una cadena de texto). (diferencindolo de un nmero real). la longitud y direccin indicadas.

la longitud y direccin indicadas.

is_string(x) Averigua cuando X es una cadena de texto.

Funciones de cadenas de texto


Estas son las funciones disponibles para trabajar con cadenas de texto:

chr(val) Devuelve una cadena con el carcter al que hace referencia el cdigo asci VAL. ord(str) Devuelve el cdigo asci del primer carcter de la cadena de texto STR. real(str) Convierte una cadena de texto
exponencial. en un nmero real. STR puede contener signos negativos, puntos decimales o una parte

string(val) Convierte el nmero real en una cadena de texto utilizando el formato estndar (sin decimales cuando se trata de un
nmero entero y un mximo de dos dgitos decimales en cualquier otro caso).

string_format(val,tot,dec) Convierte VAL en una cadena de texto utilizando nuestro propio formato: TOT indica el mximo
de dgitos y DEC el nmero de dgitos decimales.

string_length(str) Devuelve el nmero de caracteres de la cadena.

string_pos(substr,str) Devuelve la posicin de SUBSTR en STR (0 No encontrado). string_copy(str,index,count) Devuelve una subcadena de STR, partiendo de la posicin INDEX y de una longitud definida
por COUNT.

string_char_at(str,index) Devuelve el carcter

situado en la posicin INDEX de la cadena STR.

string_delete(str,index,count) Devuelve una copia de la cadena STR con una parte borrada, que empieza en INDEX y
de una longitud definida por COUNT.

string_insert(substr,str,index) Devuelve una copia de la cadena STR con la subcadena SUBSTR aadida en la posicin
INDEX.

string_replace(str,substr,newstr) Devuelve una copia de STR con la primera ocurrencia de SUBSTR reemplazada por
NEWSTR.

string_replace_all(str,substr,newstr) Devuelve una copia de STR con todas las ocurrencias encontradas de
SUBSTR reemplazadas por la subcadena NEWSTR.

string_count(substr,str) Devuelve el nmero de ocurrencias de la subcadena SUBSTR existentes en STR. string_lower(str) Devuelve una copia en minsculas de la cadena STR. string_upper(str) Devuelve una copia en maysculas de la cadena STR. string_repeat(str,count) Devuelve una cadena con un nmero de copias de la cadena STR definido por COUNT. string_letters(str) Devuelve una cadena de texto que solo contiene las letras de la cadena STR. string_digits(str) Devuelve una cadena que solo contiene los nmeros de la cadena STR. string_lettersdigits(str) Devuelve una cadena que solo contiene los nmeros y las letras de la cadena STR.

Trabajando con el tiempo y la fecha


Game Maker dispone de varias funciones para trabajar con fechas y horas. La fecha y la hora se almacenan como un nmero real. La parte entera es el nmero de das que han pasado desde 12/30/1899 y parte decimal de este valor es la fraccin de un da de 24 horas que ha transcurrido hasta el momento. Estas son las funciones disponibles:

date_current_datetime()Devuelve fecha y hora actual. date_current_date()Devuelve fecha actual ignorando la hora


.date_current_time()Devuelve hora actual ignorando la fecha.

date_create_datetime(year,month,day,hour,minute,second) Crea un valor fecha-hora correspondiente a la


fecha y hora indicados.

date_create_date(year,month,day) Crea un valor fecha-hora correspondiente a la fecha indicada. date_create_time(hour,minute,second) Crea un valor fecha-hora correspondiente a la hora indicada. date_valid_datetime(year,month,day,hour,minute,second) Muestra si la hora y fecha indicados son vlidos. date_valid_date(year,month,day) Muestra si la fecha indicada es vlida. date_valid_time(hour,minute,second) Muestra si la hora indicada es vlida. date_inc_year(date,amount) Devuelve una nueva fecha N aos despus de la fecha indicada. N debe ser un nmero entero. date_inc_month(date,amount) Devuelve una nueva fecha N meses despus de la fecha indicada. N debe ser un nmero
entero.

date_inc_week(date,amount) Devuelve una nueva fecha N semanas despus de la fecha indicada. N debe ser un nmero
entero.

date_inc_day(date,amount) Devuelve una nueva fecha N das despus de la fecha indicada. N debe ser un nmero entero. date_inc_hour(date,amount) Devuelve una nueva fecha
entero. N horas despus de la fecha indicada. N debe ser un nmero

date_inc_minute(date,amount) Devuelve una nueva fecha N minutos despus de la fecha indicada. N debe ser un nmero
entero.

date_inc_second(date,amount) Devuelve una nueva fecha N segundos despus de la fecha indicada. N debe ser un nmero
entero.

date_get_year(date) Devuelve el ao actual. date_get_month(date) Devuelve el mes actual. date_get_week(date) Devuelve la semana actual. date_get_day(date) Devuelve el da actual. date_get_hour(date) Devuelve la hora actual. date_get_minute(date) Devuelve el minuto actual. date_get_second(date) Devuelve el segundo actual. date_get_weekday(date) Devuelve el da de la semana actual. date_get_day_of_year(date) Devuelve el da del ao especificado. date_get_hour_of_year(date) Devuelve la hora del ao especificado. date_get_minute_of_year(date) Devuelve el minuto del ao especificado. date_get_second_of_year(date) Devuelve el segundo del ao especificado. date_year_span(date1,date2) Devuelve el nmero de aos que hay entre las dos fechas. Reporta los aos incompletos como
una fraccin.

date_month_span(date1,date2) Devuelve el nmero de meses que hay entre las dos fechas. Reporta los meses incompletos
como una fraccin.

date_week_span(date1,date2) Devuelve el nmero de semanas que hay entre las dos fechas. Reporta las semanas
incompletas como una fraccin.

date_day_span(date1,date2) Devuelve el nmero de das que hay entre las dos fechas. Reporta los das incompletos como
una fraccin.

date_hour_span(date1,date2) Devuelve el nmero de horas que hay entre las dos fechas. Reporta las horas incompletas
como una fraccin.

date_minute_span(date1,date2) Devuelve el nmero de minutos que hay entre las dos fechas. Reporta los minutos
incompletos como una fraccin.

date_second_span(date1,date2) Devuelve el nmero de segundos que hay entre las dos fechas. Reporta los segundos
incompletos como una fraccin.

date_compare_datetime(date1,date2) Compara los dos valores fecha-hora. Devuelve -1, 0, 1 dependiendo en si la


primera fecha es anterior, igual, o posterior que la segunda.

date_compare_date(date1,date2) Compara los dos valores fecha-hora tomando en cuenta slo la parte de la fecha.
Devuelve -1, 0, 1 dependiendo en si la primera es anterior, igual, o posterior que la segunda.

date_compare_time(date1,date2) Compara los dos valores fecha-hora tomando en cuenta slo la parte de la hora.
Devuelve -1, 0, 1 dependiendo en si la primera es anterior, igual, o posterior que la segunda.

date_date_of(date) Devuelve la parte de la fecha del valor fecha-hora indicado, estableciendo la hora a 0. date_time_of(date) Devuelve la hora del valor fecha-hora indicado, estableciendo la fecha a 0. date_datetime_string(date) Devuelve una cadena indicando la fecha y hora definidos, en el formato predeterminado para el
sistema.

date_date_string(date) Devuelve una cadena indicando la fecha definida en el formato predeterminado para el sistema. date_time_string(date) Devuelve una cadena indicando la hora definida en el formato predeterminado para el sistema. date_days_in_month(date) Devuelve el nmero de das que hay en el mes indicado. date_days_in_year(date) Devuelve el nmero de das que hay en el ao indicado. date_leap_year(date) Define si el ao indicado es un ao bisiesto. date_is_today(date) Define si la fecha indicada es la actual.

Game play
Hay una gran cantidad de variables y funciones que puedes emplear para definir el game play (jugabilidad). Estas en particular influyen en el movimiento y creacin de instancias, el timing, y el manejo de los eventos.

La informacin sobre el game play se puede encontrar en las siguientes secciones: Movindose Paths Planificacin del movimiento Deteccin de colisiones Instancias Desactivando instancias Timing Rooms Score Generando eventos Otras variables y funciones

Movindose
Obviamente, un aspecto importante de los juegos es el movimiento de las instancias de los objetos. Cada instancia tiene dos variables internas

x e y que indican la posicin de la instancia. (Para ser precisos, indican el lugar donde se encuentra el punto de origen del sprite). x e y. Es lo que debes hacer si deseas movimientos ms complicados. Este cdigo normalmente se coloca en el evento step del

La posicin (0,0) es la esquina superior izquierda del cuarto. Puedes cambiar la posicin de la instancia al cambiar los valores de sus variables objeto.

Si el objeto se mueve con velocidad y direccin constantes, hay una manera ms fcil de lograrlo. Cada instancia tiene una velocidad horizontal (hspeed) y vertical (vspeed). Ambas se indican en pxeles por paso (step). Una velocidad horizontal positiva indica movimiento a la derecha, una velocidad horizontal negativa indica movimiento a la izquierda. La velocidad vertical positiva es movimiento hacia abajo y la negativa indica movimiento hacia arriba. Por lo que slo debes establecer estos valores una vez (por ejemplo en el evento de creacin) para dar al objeto un movimiento constante.

Hay otra manera muy diferente de especificar el movimiento, usando direccin (en grados 0-359), y velocidad (no debe ser negativa). Puedes configurar y leer estas variables para especificar un movimiento arbitrario. (Internamente se convierte a valores de

hspeed y vspeed). Tambin tenemos la friccin y la gravedad, y la direccin de la gravedad. motion_add(dir,speed) para agregar movimiento al actual.

Finalmente, tenemos la funcin

Para concluir, cada instancia tiene las siguientes variables y funciones referentes a su posicin y movimiento:

x y

Su posicin x. Su posicin y.

xprevious Su posicin x anterior. yprevious xstart hspeed


Su posicin y previa.

Su posicin x inicial en el cuarto.

ystart Su posicin y inicial en el cuarto.


Componente horizontal de la velocidad.

vspeed Componente vertical de la velocidad. direction Su direccin actual (0-360, contra las manecillas del reloj, 0 = a la derecha). speed Su velocidad actual (pxeles por step). friction Friccin actual (pxeles por step). gravity Cantidad actual de gravedad (pxeles por paso). gravity_direction Direccin de la gravedad (270 es hacia abajo). motion_set(dir,speed) Establece el movimiento a la velocidad speed y la direccin dir. motion_add(dir,speed) Agrega el movimiento al movimiento actual (como una suma vectorial).
Existe un gran nmero de funciones para ayudarte a definir el movimiento:

place_free(x,y) Devuelve si la instancia colocada en la posicin (x, y) est libre de colisin. Normalmente se emplea para revisar
antes de mover la instancia a la nueva posicin.

place_empty(x,y) Devuelve si la instancia colocada en la posicin (x, y) no se encuentra con nadie. Esta funcin tambin toma en
cuenta las instancias no slidas.

place_meeting(x,y,obj) Devuelve si la instancia colocada en la posicin (x,y) se encuentra con un el objeto obj. obj puede ser
un objeto en cuyo caso la funcin devuelve verdadero si se encuentra con una instancia de ese objeto. Tambin puede ser el instancia, o la palabra especial

id de una

other.

place_snapped(hsnap,vsnap) Devuelve si la instancia est alineada con los valores de snap hsnap y vsnap. move_random(hsnap,vsnap) Mueve la instancia a una posicin libre, y la alinea con los valores hsnap y vsnap,
la accin correspondiente. al igual que

move_snap(hsnap,vsnap) Alinea la instancia, como la accin correspondiente. move_wrap(hor,vert,margin) Teleporta la instancia cuando sale del room al lado opuesto. hor indica si debe teleportarse
horizontalmente y

vert indica si debe teleprotarse verticalmente. margin indica cunto debe salir el origen de la instancia del room

para teleportarse (es decir, un margen alrededor del room). Esta funcin se usa normalmente el evento Outside.

move_towards_point(x,y,sp) Mueve la instancia con velocidad sp hacia el punto (x,y). move_bounce_solid(adv) Rebotar contra objetos slidos, como la accin correspondiente. adv indica si se emplea rebote
avanzado, que toma en cuenta las paredes inclinadas.

move_bounce_all(adv) Rebotar contra todas las instancias, en lugar de slo con las slidas. move_contact_solid(dir,maxdist) Mover la instancia en la direccin dir hasta que haya contacto con un objeto slido. Si
no hay collision en la posicin actual, la instancia es colocada justo antes de donde ocurre una colisin. Si ya hay una colisin en la posicin actual, la instancia no se mueve. Puedes especificar la distancia mxima a mover la instancia maxdist (emplea un nmero negativo para indicar distancia arbitraria).

move_contact_all(dir,maxdist) Igual que la funcin anterior pero esta vez se detiene hasta que haya contacto con
cualquier objeto, no solo slidos.

move_outside_solid(dir,maxdist) Mueve la instancia en la direccin dir hasta que no est al alcance de un objeto slido.
Si no hay collision en la posicin actual, no se mueve la instancia. Puedes especificar la distancia mxima a mover (usa un valor negativo para indicar una distancia arbitraria).

move_outside_all(dir,maxdist) Igual que la anterior pero se mueve hasta estar fuera de alcance de cualquier objeto, no
solo objetos slidos.

distance_to_point(x,y) Devuelve la distancia de la caja lmite de la instancia actual hacia el punto (x,y). distance_to_object(obj) Devuelve la distancia de la instancia actual a la instancia ms cercana del objeto obj. position_empty(x,y) Indica si no hay nada en la posicin (x,y). position_meeting(x,y,obj) Indica si en la posicin (x,y) hay una instancia obj. obj puede ser un objeto, una id de una
instancia, o las palabras clave

self, other o all.

Paths
En Game Maker puedes definir caminos o trayectorias (paths) y ordenar a las instancias que los sigan. Aunque puedes usar las acciones para esto, existen funciones que te dan ms flexibilidad:

path_start(path,speed,endaction,absolute) Comienza un path para la instancia actual. path


path que deseas iniciar.

es el nombre del

speed es la velocidad

con la que la instancia debe moverse por el path (una velocidad negativa indica que la

instancia se mover al revs sobre el path). usar los siguientes valores para esto: 0 : parase

endaction indica que debera ocurrir cuando la instancia llegue al final del camino. Puedes

1: continuar desde la posicin inicial del path (s el path no est cerrado saltamos a la posicin inicial) 2: continuar desde la posicin inicial 3: recorrer el path al revs (cambia el signo de la velocidad) El argumento

absolute debe ser true o false. Cuando es true se usan las coordenadas absolutas del path. Cuando es false el path es

relativo a la posicin actual de la instancia. Para ser ms precisos, si la velocidad es positiva el punto inicial del path se colocar en la posicin actual de la instancia y se seguir desde ah. Cuando la velocidad es negativa, el punto final del path se colocar en la posicin de la instancia y el path se seguir al revs desde ah.

path_end() Termina el path para la instancia actual. path_index* ndice del path que la instancia sigue. No se puede cambiar directamente, debes utilizar la

funcin

path_start(path,speed,endaction,absolute).

path_position Posicin en el path actual. 0 es el principio del path y 1 es el final. Los valores deben estar entre 0 y 1. path_positionprevious Posicin previa en el path. Esto se puede usar en eventos de colisin para colocar la instancia en la
posicin anterior antes de una colisin.

path_speed Velocidad (en pxels por paso) con la que la instancia sigue el path. Con una velocidad negativa el path se recorre en
sentido inverso.

path_orientation Orientacin (antihoraria) en la que se realiza el path. 0 es la orientacin normal del path. path_scale Escala del path. Aumntala para hacer el path ms grande. 1 es el valor normal del path. path_endaction La accin que se debe ejecutar al finalizar el path. Puedes indicar los valores explicados ms arriba.

Planificacin del movimiento


La planificacin del movimiento te ayuda a mover una instancia de un punto a otro esquivando otras instancias que pudiera encontrarse por el camino (por ejempo, paredes). Resulta imposible dar funciones generales que funcionen en cualquier situacin. As mismo, las operaciones necesarias para calcular un camino libre de colisiones consumen bastantes recursos, as que debes usar estas funciones con criterio. Ten todo esto en cuenta cuando uses las siguientes funciones.

Game Maker dispone de diferentes formas de planificar el movimiento. La ms simple consiste en hacer que una instancia de un paso hacia la posicin final, intentando ir en lnea recta pero tomando otra direccin si esto ltimo resulta imposible. Estas funciones deben usarse en el evento step de la instancia y se corresponden a las acciones ya comentadas:

mp_linear_step(x,y,stepsize,checkall) Esta funcin hace que la instancia de un paso hacia la posicin (x,y). La
longitud del paso se indica con el parmetro

stepsize. Si la instancia ya ha llegado a esa posicin no se mover. Si checkall es

true la instancia se parar cuando choque con una instancia de cualquier objeto. Si es false, slo se parar al chocar con un objeto slido. Esta funcin no propone un camino alternativo, simplemente se parar si encuentra un obstculo. La funcin devuelve si se ha alcanzado el destino.

mp_linear_step_object(x,y,stepsize,obj) Igual que la anterior, pero esta vez slo se tienen en cuenta las
instancias del objeto

obj. obj puede ser un objeto o una id de una instancia particular.

mp_potential_step(x,y,stepsize,checkall) Igual que las anteriores, pero en este caso la instancia intentar
esquivar los obstculos que encuentre. Cuando la instancia se choque con un obstculo cambiar su direccin para tratar de esquivar el objeto, movindose alrededor de l. Puede que no siempre se consiga llegar a la meta, pero la funcin siempre intentar acercar lo ms posible a la instancia. Devuelve true si se llega a la meta.

mp_potential_step_object(x,y,stepsize,obj) ) Igual que la anterior, pero esta vez slo se tienen en cuenta las
instancias del objeto

obj. obj puede ser un objeto o una id de una instancia particular.

mp_potential_settings(maxrot,rotstep,ahead,onspot) La funcin anterior hace su trabajo usando un nmero


de parmetros que pueden ser cambiados con esta funcin. El mtodo funciona como sigue: primero la instancia intenta moverse en lnea recta hacia la meta. Para ello, mira un nmero de pasos adelante para ver si hay algn obstculo. Este nmero de pasos corresponde al

valor

ahead (por defecto 3). Reduciendo este valor la instancia comenzar a cambiar su direccin ms tarde si encuentra un obstculo. rotstep(por defecto 10). Reducindolo conseguimos que la instancia tenga ms maxrot
(por defecto 30) indica cunto puede cambiar como

Aumentndolo cambiar antes de direccin. Si detectamos una colisin, la funcin mira a la derecha y a la izquierda para encontrar un camino libre. Esto se realiza en pasos de tamao

posibilidades para moverse pero la funcin ser ms lenta. El parmetro

mximo la direccin en un paso. As que aunque pueda moverse en lnea recta hacia la meta no lo har si debe girar ms de lo indicado por este parmetro. Aumentndolo conseguimos que la instancia pueda girar ms en cada paso, haciendo que sea ms fcil encontrar un camino aunque ste ser menos uniforme. Disminuyendo su valor el camino ser ms suave pero la instancia realizar giros ms largos, haciendo que a veces no pueda llegar exactamente a la meta. Cuando la instancia no se puede mover en ninguna direccin el comportamiento depender del valor de por

onspot. Si onspot es true la instancia rotar en su posicin la cantidad indicada

maxrot. Si es false se parar (esto es til para coches, por ejemplo, pero reduce las posibilidades de encontrar un camino hacia la

meta).

Observa que el acercamiento potencial slo usa informacin local. As que slo encontrar un camino si la informacin es suficiente para determinar la direccin correcta. Por ejemplo, normalmente no podr encontrar el camino para escapar de un laberinto.

El segundo tipo de funciones calcula un camino libre colisiones. Una vez que el camino se ha calculado puedes asignrselo a la instancia para que se mueva hacia la meta como si fuera un path normal que t hubieras creado. El clculo del camino tarda un poco pero una vez hecho la ejecucin del path es muy rpida. Por supuesto, esto es vlido si la situacin no cambia (por ejemplo, si los obstculos se mueven). Entonces necesitars volver a calcular el path. De nuevo, estas funciones pueden fallar en algunas circunstancias. Estas funciones slo estn disponibles en la versin registrada de Game Maker.

Las dos primeras funciones usan el acercamiento por movimiento lineal y potencial que se usan en las funciones anteriores.

mp_linear_path(path,xg,yg,stepsize,checkall) Calcula un path en lnea recta para la instancia desde su posicin


hasta (xg,yg) usando el paso especificado en

stepsize. Usa pasos como en la funcinmp_linear_step(). El path indicado debe

existir con anterioridad a la llamada de la funcin y ser sobreescrito por el nuevo path (consulta el captulo sobre cmo crear y destruir paths). La funcin devuelve si se ha encontrado un path. Si no consigue encontrar un camino, la funcin devolver un path hasta la posicin donde la instancia qued bloqueada.

mp_linear_path_object(path,xg,yg,stepsize,obj) Igual que la anterior, pero esta vez slo se tienen en cuenta
las instancias del objeto

obj. obj puede ser un objeto o una id de una instancia particular. stepsize e intentando evitar colisionar con los

mp_potential_path(path,xg,yg,stepsize,factor,checkall) Esta funcin calcula un camino para instancia


desde su posicin actual y orientacin hasta (xg,yg) usando el paso especificado en obstculos. Utiliza pasos potenciales como la funcin con

mp_potential_step() y los parmetros se pueden configurar

mp_potential_settings(). El path indicado debe existir con anterioridad a la llamada de la funcin y ser sobreescrito por

el nuevo path (consulta el captulo sobre cmo crear y destruir paths). La funcin devolver si se ha encontrado un camino. Para evitar que la funcin contine calculando para siempre debes especificar unfactor mayor que 1. La funcin se detendr y devolver un mensaje de error si no puede encontrar un camino que sea ms corto que la distancia del origen a la meta multiplicada por

factor. Un factor de

4 es normalmente suficiente pero si crees que la instancia tendr un camino largo puedes aumentarlo. Si la funcin falla se crea el camino

en direccin a la meta pero la instancia no llegar la meta.

mp_potential_path_object(path,xg,yg,stepsize,factor,obj) Igual que la anterior, pero esta vez slo se


tienen en cuenta las instancias del objeto

obj. obj puede ser un objeto o una id de una instancia particular.

Las dems funciones usan un mecanismo mucho ms complejo basado en rejillas (un algoritmo A*). Tiene ms sexito a la hora de encontrar caminos y hacerlos ms cortos, pero requiere ms trabajo por tu parte. Adems, tambin puede fallar en algunas ocasiones. El funcionamiento es como sigue: primero situamos una rejilla sobre la parte del cuarto afectada. Puedes usar si quieres usar una rejilla fina (ms lento) o ms espaciada. Despus, determinamos las celdas de la rejilla ocupadas por objetos relevantes (usando colisin precisa o la caja de contorno) y marcamos estas celdas como prohibidas. As que una celda estar prohibida si parte de un obstculo la est ocupando. Finalmente especificamos la posicin inicial y final, que deben estar en celdas libres de la rejilla y la funcin calcula el camino ms corto entre ellas. El camino ir de centro a centro de las celdas libres. As que las celdas deben ser lo suficientemente grandes como para que la instancia entre totalmente dentro de ellas. Ahora puedes asignar el path a una instancia y hacer que lo siga.

Este sistema es muy potente (se usa en muchos juegos profesionales) pero requiere que lo planifiques con cuidado. Debes determinar la zona del cuarto sobre la que situar la rejilla y el tamao de las celdas con la mayor precisin posible. Tambin debes decidir qu objetos deben tomarse en cuenta y si es necesaria la colisin precisa o no. Todos estos parmetros afectan de manera muy notable a la eficiencia del mtodo.

En particular, el tamao de las celdas es crucial. Recuerda que las celdas deben lo suficientemente grandes como para que la instancia que se mueve entre totalmente dentro de ellas (ten cuidado con la posicin del origen de la instancia y recuerda que puedes mover el path para hacer que el centro del objeto coincida con el centro de la celda). Por otro lado, cuanto menores sean las celdas ms caminos diferentes podrs encontrar. Si haces las celdas demasiado grandes puede que unos pocos objetos ocupen todas las celdas cerrando todos los caminos posibles.

Las funciones para el mtodo de rejilla son:

mp_grid_create(left,top,hcells,vcells,cellwidth,cellheight) Esta funcin crea la rejilla. Devuelve un


ndice que debe ser usado en las dems funciones. Puedes crear y mantener varias rejillas al mismo tiempo.left y posicin de la esquina superior izquierda de la rejilla y respectivamente. Finalmente,

top indican la

hcells y vcells indican el nmero de celdas horizontales y verticales

cellwidth y cellheight indican la anchura y altura de las celdas.

mp_grid_destroy(id) Destruye la rejilla indicada y libera la memoria usada. No olvides llamar a esta funcin cuando no necesites
usar ms la rejilla.

mp_grid_clear_all(id) Marca todas las celdas como libres. mp_grid_clear_cell(id,h,v) Marca la celda indicada como libre (la primera celda es la 0,0). mp_grid_clear_rectangle(id,left,top,right,bottom) Marca como libres todas las celdas que intersectan el
rectngulo definido en coordenadas absolutas del cuarto.

mp_grid_add_cell(id,h,v) Marca ls celdas indicadas como prohibidas. mp_grid_add_rectangle(id,left,top,right,bottom) Marca todas las celdas que intersectan el rectngulo como
prohibidas.

mp_grid_add_instances(id,obj,prec) Marca todas las celdas que intersectan una instancia del objeto indicado como
prohibidas. Tambin puedes especificar una id de una instancia concreta, o la palabra clave instancias.

all para indicar todas las

prec indica si hay que usar colisin precisa (slo funcionar si en el sprite de la instancia est activada la misma opcin).

mp_grid_path(id,path,xstart,ystart,xgoal,ygoal,allowdiag) Calcula el path a travs de la rejilla. El


path indicado debe existir con anterioridad a la llamada de la funcin y ser sobreescrito por el nuevo path (consulta el captulo sobre cmo crear y destruir paths). meta.

xstart e ystart indican el comienzo del path y xgoal e ygoal las coordenadas de la

allowdiag indica si se permiten movimientos diagonales entre celdas o slo horizontales y verticales. La funcin devuelve si

consigui calcular un path (observa que el path es independiente de la instancia actual).

mp_grid_draw(id) Esta funcin dibuja la rejilla marcando las celdas libres y prohibidas (muy til para buscar errores).

Deteccin de colisiones
Al planificar movimientos o decidir ciertas acciones es importante comprobar si ocurren colisiones con otras instancias en otras posiciones. Las funciones siguientes se utilizan para esto. Todas ellas tienen 3 argumentos en comn: el argumento palabra clave

objpuede ser un objeto, la notme indica si no se debe tener

all, o la id de una instancia. El argumento prec indica si se debe usar colisin precisa o la caja de contorno de la instancia

(la colisin precisa slo funciona si el sprite de la instancia tiene activada la misma opcin). El argumento

en cuenta a la instancia que llama a la funcin. Todas estas funciones devuelven la id de una de las instancias con las que se detecta colisin. Si no hay colisin devuelven un valor negativo.

collision_point(x,y,obj,prec,notme) Comprueba si hay una colisin en el punto (x,y) con instancias del objeto obj. collision_rectangle(x1,y1,x2,y2,obj,prec,notme) Comprueba si hay una colisin
con las esquinas indicadas e instancias del objeto entre el rectngulo (slido)

obj. Por ejemplo, puedes usar esta funcin para ver si un rea est libre de obstculos.
entre la circunferencia (slido)

collision_circle(xc,yc,radius,obj,prec,notme) Comprueba si hay una colisin


con centro (xc,yc) y radio r e instancias del objeto

obj. Puedes usar esta funcin para ver si un objeto est cerca de una posicin.
entre la elipse (slida) con las

collision_ellipse(x1,y1,x2,y2,obj,prec,notme) Comprueba si hay una colisin


esquinas indicadas e instancias del objeto

obj.
entre la lnea que va de (x1,y1) a

collision_line(x1,y1,x2,y2,obj,prec,notme) Comprueba si hay una colisin


(x2,y2) e instancias del objeto

obj. Esta funcin es muy poderosa. Puedes usarla para comprobar si una instancia puede ver a otra

chequeando si entre ellas hay una pared.

Instancias
Las unidades bsicas del juego son las instancias. Durante el juego, puedes cambiar varios aspectos de estas instancias. Tambin puedes crear o destruir instancias. Adems de las variables de movimiento y las de dibujo cada instancia posee las siguientes variables:

object_index* ndice del objeto del cual sta es una instancia. No se puede cambiar. id* La id nica de la instancia (>= 100000) (Al definir cuartos la id de la instancia bajo el puntero del ratn es indicada). No se puede
cambiar.

mask_index ndice de l sprite usado como mscara para las colisiones. Si indicas -1 la mscara ser igual al sprite de la instancia. solid Indica si la instancia es slida o no. persistent Indica si la instancia es persistente y reaparecer al moverse a otro cuarto. A veces puedes querer volver a ponerlo a 0
(por ejemplo, al volver al primer cuarto).

Al trabajar con instancias hay un problema: no es fcil identificar una instancia concreta. No tienen un nombre. Cuando slo hay una instancia de un objeto puedes acceder a ella usando el nombre del objeto pero normalmente necesitas conocer la id de la instancia. Este identificador nico se puede usar en construcciones with y para identificar la instancia. Afortunadamente, las siguientes variables te ayudan a localizar la id de una instancia:

instance_count* Nmero de instancias que existen en el cuarto. instance_id[0..n-1]* La id de la instancia nmero n.


Observa que la asignacin de las instancias al

instance_id[] cambia en cada step, as que debes actualizar este valor. Por ejemplo:

imagina que cada unidad en tu juego tiene un poder y quieres encontrar la ms poderosa de todas. Puedes hacerlo con el siguiente cdigo:

{ maxid = -1; maxpower = 0; for (i=0; i<instance_count; i+=1) { iii = instance_id[i]; if (iii.object_index == unit) { if (iii.power > maxpower) {maxid = iii; maxpower = iii.power;} } } }
Despus del bucle maxid contendr la id de la instancia ms podersa (No destruyas instancias durante un bucle como ste porque se eliminarn inmediatamente y te saltars instancias existentes).

instance_find(obj,n) Devuelve la id de la instancia n+1 de tipo obj. obj puede ser un objeto o la palabra clave all. Si no
existe se devuelve el objeto especial

noone. Recuerda que el orden de las instancias cambia en cada step as que no puedes usar valores

de steps anteriores.

instance_exists(obj) Devuelve si existe alguna instancia del objeto obj. obj puede ser un objeto, la id de una instancia
palabra clave

o la

all.

instance_number(obj) Devuelve el nmero de instancias de tipo obj. obj puede ser un objeto o la palabra clave all. instance_position(x,y,obj) Devuelve la id de la instancia de tipo obj en la posicin (x,y). Cuando hay varias instancias en
esa posicin se devuelve la id de la prtimera. especial

obj puede ser un objeto o la palabra clave all. Si no existe se devuelve el objeto

noone

instance_nearest(x,y,obj) Devuelve la id de la instancia de tipo obj que est ms cercana en ese momento a
(x,y).

obj puede ser un objeto o la palabra clave all. obj puede ser un objeto o la palabra clave all. obj puede ser un objeto o la palabra clave all. Si no existe se devuelve el objeto especialnoone.

instance_furthest(x,y,obj) Devuelve la id de la instancia de tipo obj que est ms lejana en ese momento a
(x,y).

instance_place(x,y,obj) Devuelve la id de la instancia de tipo obj encontrada cuando la instancia actual se coloca en la
posicin (x,y).

Las siguientes funciones se usan para crear y destruir instancias:

instance_create(x,y,obj) Crea una instancia de obj en la posicin (x,y). La funcin devuelve la id de la nueva instancia
creada.

instance_copy(performevent) Crea una copia de la instancia actual. El argumento indica si se debe ejecutar el evento create
en la nueva instancia. La funcin devuelve la id de la nueva copia.

instance_destroy() Destruye la instancia actual. instance_change(obj,perf) Cambia la instancia a una del tipo obj. perf indica si se deben ejecutar los eventos de
destruccin y creacin.

position_destroy(x,y) Destruye toda las instancias cuyo sprite pasa por el punto (x,y). position_change(x,y,obj,perf) Cambia todas las instancias en la posicin indicada a otras del tipo obj. perf indica si
se deben ejecutar los eventos de destruccin y creacin.

Desactivando instancias
Cuando creas un cuarto muy grande, por ejemplo en juegos de plataformas, con una vista (view) muy pequea, muchas instancias se quedan fuera de la vista. Aunque no sean visibles, estas instancias siguen ejecutando sus eventos. Tambin, al efectuar chequeos de colisin son tomadas en cuenta. Esto puede hacer que el juego se ralentice. Para remediar esto, Game Maker contiene unas funciones para desactivar o activar instancias. Pero antes de usarlas debes entender cmo funcionan.

Cuando desactivas instancias es como si las eliminaras del juego. No son visibles, no ejecutan sus eventos,as que para todas las funciones y acciones estas instancias ya no existen y no son tomadas en cuenta. As consigues que el juego sea ms rpido. Pero ten cuidado, ya que

esto puede generar errores en tu juego. Por ejemplo, al eliminar todas las instancias de un objeto, las instancias que estn desactivadas no sern eliminadas! As, una llave que recoja el jugador no podr abrir una puerta que est desactivada, por ejemplo.

El error ms crucial que puedes hacer es el de desactivar la instancia que se encarga de activar las dems instancias. Para evitar esto algunas funciones permiten especificar si la instancia que desactiva a las dems debe ser desactivada o no.

Las rutinas disponibles son las siguientes:

instance_deactivate_all(notme) Desactiva todas las instancias del cuarto. Si notme es true la instancia actual no es
desactivada (normalmente es lo que se desea).

instance_deactivate_object(obj) Desactiva todas las instancias en el cuarto del objeto especificado. Tambin puedes
indicar

all para desactivar todas las instancias o la id de una instancia concreta para desactivarla.

instance_deactivate_region(left,top,width,height,inside,notme) Desactiva todas las instancias en


la regin indicada (es decir, todas aquellas cuya caja de contorno est parcial o completamente dentro de la regin indicada). Si

inside es igual a false las instancias completamente fuera de la regin son desactivadas. Si notme es true la instancia actual no es

desactivada (normalmente es lo que se desea).

instance_activate_all() Activa todas las instancias del cuarto. instance_activate_object(obj) Activa todas las instancias en el cuarto del objeto especificado. Tambin puedes
indicar

all para activar todas las instancias o la id de una instancia concreta para activarla. inside es false las instancias fuera de la regin son activadas.

instance_activate_region(left,top,width,height,inside) Activa las instancias dentro de la regin


especificada. Si

Por ejemplo, para desactivar todas las instancias fuera de la vista y activar las que estn dentro podemos poner este cdigo en el evento step del personaje del jugador:

{ instance_activate_all(); instance_deactivate_region(view_xview[0],view_yview[0], view_wview[0],view_hview[0],false,true); }


Normalmente es mejor usar una regin ligeramente mayor que la vista.

Timing

Los buenos juegos requirieron de cuidado especial de los tiempos en que las cosas se llevaban a cabo (timing). Afortunadamente el Game Maker se ocupa de la mayor parte del timing por ti. Se asegura de que las cosas ocurran con un ritmo constante. Este ritmo es definido al definir los cuartos. Pero puedes cambiarlo usando la variable global room_speed. As por ejemplo, puedes incrementar lentamente la velocidad del juego, hacindolo ms difcil, agregando una muy pequea cantidad (como 0.001) a room_speed en cada step. Si tu mquina es lenta la velocidad del juego pudiera no alcanzarse. Esto puede comprobarse usando la variable fps que monitorea constantemente el nmero actual de cuadros por segundo. Finalmente, para un timing avanzado puedes usar la variable current_time que te da el nmero de milisegundos desde que la computadora fue iniciada. Aqu est la coleccin completa de variables disponibles (slo la primera puede ser cambiada):

room_speed Velocidad del juego en el cuarto actual (en steps por segundo). fps* Nmero de cuadros que son dibujados por segundo. current_time* Nmero de milisegundos que han pasado desde que el sistema fue iniciado. current_year* El ao actual. current_month* El mes actual. current_day* El da actual. current_weekday* El da actual de la semana (1=domingo, , 7=sbado). current_hour* La hora actual. current_minute* El minuto actual. current_second* El segundo actual.

Algunas veces querrs detener el juego por un corto periodo. Para esto, usa la funcin sleep:

sleep(numb) Pausa el juego durante numb milisegundos.

Como debes saber, cada instancia tiene 12 diferentes alarmas que puedes configurar. Para cambiar los valores (u obtener los valores) de las diferentes alarmas usa la siguiente variable:

alarm[0..11] Valor de la alarma indicada. (Nota: las alarmas solo se actualizan cuando el evento de alarma para el objeto contiene
acciones!)

Hemos visto que para los problemas de un timing complejo puedes usar el recurso de las lneas de tiempo (time lines). Cada instancia puede tener un recurso time line asociado con ella. Las siguientes variables estn relacionadas con esto:

timeline_index ndice de la time line asociada con la instancia. Puedes


establecerlo a una time line en particular para usarla. Ponlo en 1 para dejar de usar la time line para la instancia.

timeline_position Posicin actual dentro de la time line. Puedes cambiarla para saltar o repetir ciertas partes. timeline_speed Normalmente, en cada step la posicin en la time line se incrementa en 1. Puedes cambiar esta cantidad
configurando esta variable a un valor diferente. Puedes usar nmeros reales, por ejemplo 0.5. Si el valor es mayor que uno, varios momentos pueden ocurrir dentro del mismo tiempo del step. Se realizarn en el orden correcto, por lo que no se saltar ninguna accin.

Rooms

Los juegos funcionan en cuartos. Cada cuarto tiene un ndice que se indica por el nombre del cuarto. El cuarto actual es almacenado en la variable room. No puedes asumir que los cuartos estn numerados en un orden consecutivo. Por lo que nunca sumes o restes un nmero de la variable room. En lugar de ello usa las funciones y variables indicadas abajo. Por lo que una tpica pieza de cdigo que usars sera:

{ if (room != room_last) { room_goto_next(); } else { game_end(); } }


Las siguientes variables y funciones se relacionan con los cuartos (rooms).

room ndice del cuarto actual; puede cambiarse para ir a un cuarto diferente, pero mejor usa las rutinas listadas abajo. room_first* ndice del primer cuarto en el juego. room_last* ndice del ultimo cuarto en el juego. room_goto(numb) Ir al cuarto con indice numb. room_goto_previous()Ir al cuarto anterior. room_goto_next()Ir al siguiente cuarto. room_restart() Reiniciar el cuarto actual. room_previous(numb)Devuelve el ndice del cuarto anterior a numb (-1 = ninguno) pero no va a l. room_next(numb) Devuelve el ndice del cuarto posterior a numb (-1 =ninguno). game_end() Finaliza el juego. game_restart() Reinicia el juego.

Los cuartos tienen varias propiedades adicionales:

room_width* Ancho del cuarto en pxeles. room_height* Alto del cuarto en pxeles. room_caption Ttulo de la ventana del cuarto. room_persistent Indica si el cuarto es persistente.
Muchos juegos ofrecen al jugador la posibilidad de guardar el juego y cargar un juego guardado. En el Game Maker esto ocurre automticamente cuando el jugador presiona <F5> para guardar y <F6> para cargar. Tambin puedes guardar y cargar juegos desde una pieza de cdigo (nota que la carga slo se lleva a cabo al final del step actual).

game_save(string) Guarda el juego al archivo con nombre string. game_load(string) Carga el juego del archivo con nombre string.
Ten en cuenta que slo los datos bsicos del juego son guardados. Por ejemplo, si guardas cuando una cancin est sonando, al cargar el juego la cancin no sonar desde ese momento. Los recursos editados tampoco son guardados, ni las partculas, los contenidos de las estructuras de datos ni la configuracin multijugador.

Score
Otro aspecto importante de muchos juegos es el score (marcador), la energa, y el nmero de vidas. El Game Maker mantiene el

score en la variable global score y el nmero de vidas en la variable global lives. Puedes cambiar el score simplemente lives es mayor que 0 y se vuelve menor

cambiado el valor de esta variable. Lo mismo se aplica para la energa y las vidas. Si la variable

o igual a 0 se ejecuta el evento no-more-lives para todas las instancias. Si no quieres mostrar el score y las vidas en el ttulo, pon la variable

show_score, etc., a falso. Tambin puedes cambiar el ttulo del marcador, de las vidas o de la energa. Para juegos ms

complicados mejor muestra el score t mismo.

score El marcador actual. lives El nmero de vidas. health La energa actual (0-100). show_score Indica si se muestra el marcador en el ttulo de la ventana. show_lives Indica si se muestra el nmero de vidas en el ttulo de la ventana. show_health Indica si se muestra la energa en el ttulo de la ventana. caption_score El ttulo empleado para el marcador. caption_lives El ttulo empleado para el nmero de vidas.

caption_health El ttulo para la energa.

Generando eventos
Como sabes, el Game Maker est completamente manejado por eventos. Todas las acciones ocurren como resultado de eventos. Hay una gran cantidad de eventos diferentes. Los eventos de creacin y destruccin ocurren cuando una instancia es creada o destruida. En cada step, el sistema maneja primero los eventos de alarma. Despus los eventos de teclado y ratn, y luego el siguiente evento step. Despus de esto las instancias son colocadas en su nueva posicin despus de lo cual se maneja el evento de colisin. Finalmente el evento draw se usa para dibujar las instancias (nota que cuando empleas mltiples vistas el evento draw es llamado varias veces en cada step). Tambin puedes aplicar un evento a la instancia actual desde una pieza de cdigo. Se tienen las siguientes funciones:

event_perform(type,numb) Realiza el evento numb del tipo type para la instancia actual. Se pueden emplear los siguientes
tipos de eventos:

ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_keypress ev_keyrelease
Cuando hay varios eventos del tipo dado, numb puede usarse para especificar el evento preciso. Para el evento de alarma

numb puede

tener un valor de 0 a 11. Para el evento de teclado puedes usar el cdigo de tecla para la tecla. Para los eventos de ratn puedes usar las siguientes constantes:

ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter

ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8
Para el evento de collision proporcionas el ndice del otro objeto. Finalmente, para el evento other puedes usar las siguientes constantes:

ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_no_more_health ev_animation_end ev_end_of_path ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15

Para el evento step puedes dar el ndice usando las siguientes constantes:

ev_step_normal ev_step_begin ev_step_end event_perform_object(obj,type,numb) Esta funcin funciona igual que la anterior pero esta vez puedes especificar
eventos en otro objeto. Nota que las acciones en estos eventos se aplican a la instancia actual, no a las instancias del objeto dado.

event_user(numb)

En los eventos other tambin puedes definir 16 eventos definidos por el usuario. Estos son ejecutados solo si

llamas esta funcin. Numb debe tener valores de 0 a 11.

event_inherited()

Ejecuta el evento heredado. Esto slo funciona si la instancia tiene un objeto padre.

Puedes obtener informacin sobre el evento actualmente ejecutado usando las siguientes variables de slo lectura:

event_type* El tipo del evento que se est ejecutando. event_number* El nmero del evento que se est ejecutando. event_object* El ndice del objeto para el cual se est ejecutando el evento actual. event_action* El ndice de la accin que est siendo ejecutada (0 es la primera en el evento, etc.)

Otras variables y funciones


Aqu puedes ver algunas variables y funciones que se refieren a los errores.

error_occurred Indica si ha ocurrido un error error_last Cadena de texto que indica el ltimo mensaje de error show_debug_message(str) Muestra la cadena str en modo debug
Las siguientes funciones te permiten saber si ciertas variables existen, darles un valor o leerlo. En todas ellas el nombre de la variable se pasa como una cadena de texto:

variable_global_exists(name) Devuelve si la variable global con el nombre especificado existe. variable_local_exists(name) Devuelve si la variable local con el nombre especificado existe para la instancia actual. variable_global_get(name) Devuelve el valor de la variable global indicada. variable_global_array_get(name,ind) Devuelve el valor de ndice ind del array global con el nombre indicado. variable_global_array2_get(name,ind1,ind2) Devuelve el valor de ndice ind1, ind2 del array bidimensional global
con el nombre indicado.

variable_local_get(name) Devuelve el valor de la variable local indicada para la instancia actual. variable_local_array_get(name,ind) Devuelve el valor de ndice ind del array locall con el nombre indicado. variable_local_array2_get(name,ind1,ind2) Devuelve el valor de ndice ind1, ind2 del array bidimensional global
con el nombre indicado.

variable_global_set(name,value) Otorga el valor indicado a la variable global especificada. variable_global_array_set(name,ind,value) Otorga el valor indicado al elemento ind del array global especificado. variable_global_array2_set(name,ind1,ind2,value) Otorga el valor indicado al elemento ind 1, ind2 del array
bidimensional global especificado.

variable_local_set(name,value) Otorga el valor indicado a la variable local especificada. variable_local_array_set(name,ind,value) Otorga el valor indicado al elemento ind del array local especificado. variable_local_array2_set(name,ind1,ind2,value) Otorga el valor indicado al elemento ind 1, ind2 del array
bidimensional local especificado.

Por ejemplo, puedes escribir:

{ if variable_global_exists('ammunition') global.ammunition += 1 else global.ammunition = 0 }


Tambin puees usar estas funciones para pasar variables a los scripts usando referencias, utilizando el nombre de las variables como cadenas de texto.

Puedes cambiar la prioridad del programa usando la funcin :

set_program_priority(priority) Cambia la prioridad del programa. Debes indicar un valor comprendido entre -3 y +3.
Usando -3 el programa se ejecutar slo si no hay otro proceso que requiera tiempo de computacin. -2 y -1 son valores por debajo de lo normal, as que otros procesos tendrn prioridad sobre el juego. 0 es el valor normal. +1 y +2 son valores de alta prioridad, que pueden hacer que el juego se ejecute ms suavemente y a mayor velocidad. Otros procesos tendrn menos tiempo de computacin. +3 indica ejecucin en tiempo real: todo el tiempo de computacin se pone en disposicin del juego. Esto puede crear problemas con otras aplicaciones que se estn ejecutando en el ordenador. Adems, los eventos de teclado o pinchar en el botn para cerrar la ventana pueden dejar de ser atendidos por Windows. As que slo debes usar este valor si realmente necesitas todo el procesamiento posible. Se cuidadoso y no olvides guardar tu juego antes de ejecutarlo.

Interaccin con el usuario


No hay juego sin interaccin con el usuario. La manera estndar de interactuar con el usuario en el Game Maker es colocando acciones en los eventos del ratn o del teclado. Pero en ocasiones se necesita ms control. Desde una pieza de cdigo puedes chequear la posicin del ratn o si alguno de sus botones es presionado. Normalmente esto se chequea en el evento step de algn objeto controlador y llevas a cabo las acciones adecuadas. La informacin sobre este tema se encuentra en las secciones: El teclado El ratn El joystick

El teclado
Para interaccin con el teclado (keyboard) las siguientes funciones y variables existen:

keyboard_lastkey Cdigo de la ltima tecla presionada. Mira ms las constantes para los cdigos de tecla. Puedes cambiarlo, p. ej,
ponerlo a 0 si tu lo manipulaste.

keyboard_key Cdigo de tecla de la tecla presionada actualmente (mira mas abajo; 0 si no se presiona ninguna) keyboard_lastchar ltimo carcter presionado (como string) keyboard_string Cadena de caracteres de los ltimos 1024 caracteres tipeados. Esta cadena solo contendr caracteres imprimibles
en la pantalla. Tambin responde a la tecla de retroceso borrando el ltimo carcter.

En ocasiones es til mapear una tecla a otra. Por ejemplo pudieras permitir al jugador emplear tanto las teclas del cursor como las del teclado numrico. En lugar de duplicar las acciones puedes mapear el teclado numrico a las teclas del cursor. Tambin pudieras implementar un mecanismo en el que el jugador pueda seleccionar las teclas a usar. Para este fin, contamos con las siguientes funciones:

keyboard_set_map(key1,key2) Mapea la tecla con el cdigo de tecla key 1 a key2. keyboard_get_map(key) Devuelve el mapeado actual para una tecla keyboard_unset_map() Restablece todas sus teclas a su mapa original.

Para chequear si una tecla o botn del ratn en particular han sido presionados puedes emplear las siguientes funciones. Esto es til particularmente cuando se presionan varias teclas simultneamente.

keyboard_check(key) Indica si la tecla con el cdigo de tecla particular est presionado. keyboard_check_pressed(key) Indica si la tecla con el cdigo de tecla particular fue presionado desde el ltimo step. keyboard_check_released(key) Indica si la tecla con el cdigo de tecla particular dej de presionarse desde el ltimo step. keyboard_check_direct(key) Indica si la tecla con el cdigo de tecla es presionada chequeando el hardware directamente. El
resultado es independiente de la aplicacin enfocada. Esta funcin permite algunos chequeos ms. En este caso puedes emplear los cdigos vk_lshift, vk_lcontrol, vk_lalt, vk_rshift, vk_rcontrol y vk_ralt para checar si se presiona la tecla shift, control o alt, ya sea izquierda o derecha

Las siguientes rutinas puedes ser usadas para manipular el estado del teclado:

keyboard_get_numlock()Indica si BloqNum est activada. keyboard_set_numlock(on) Activa (on=true) o desactiva (on=false)


BloqNum.

keyboard_key_press(key) Simula presionar la tecla con el cdigo de tecla keyboard_key_release(key) Simulates a release of the key with the indicated keycode.
Las siguientes constantes para los cdigos de tecla son:

vk_nokey Cdigo de tecla que representa que no hay teclas presionadas vk_anykey Cdigo de tecla que representa que cualquier tecla ha sido presionada. vk_left Cdigo para tecla de la flecha izquierda vk_right Cdigo para tecla de la flecha derecha vk_up Cdigo para tecla de la flecha arriba vk_down Cdigo para tecla de la flecha abajo vk_enter Tecla Enter o Intro vk_escape Tecla Escape vk_space Tecla Espacio vk_shift Tecla Shift vk_control Tecla Control vk_alt Tecla Alt vk_backspace Tecla Backspace o Retroceso vk_tab Tecla Tab vk_home Tecla Inicio vk_end Tecla Fin vk_delete Tecla Suprimir vk_insert Tecla Insertar vk_pageup Tecla Re Pag vk_pagedown Tecla Av Pag vk_pause Tecla Pausa/Inter vk_printscreen Tecla Impr Pant/Pet Sis vk_f1 ... vk_f12 Cdigos de tecla para las las teclas funcionales F1 hasta F12 vk_numpad0 ... vk_numpad9 Teclas numricas en el teclado numrico vk_multiply Tecla de multiplicacin en el teclado numrico vk_divide Tecla de divisin en el teclado numrico vk_add Tecla de suma en el teclado numrico vk_subtract Tecla de substraccin en el teclado numrico vk_decimal Tecla de punto decimal en el teclado numrico
Para las letras usa por ejemplo

ord('A'). (Letras Maysculas). Para los dgitos usa por ejemplo ord('5') para obtener la tecla <5> keyboard_check_direct:

(no en el teclado numrico). Las siguientes constantes solo sirven para

vk_lshift Tecla Shift de la Izquierda vk_lcontrol Tecla Control de la Izquierda vk_lalt Tecla Alt de la Izquierda vk_rshift Tecla Shift de la Derecha

vk_rcontrol Tecla Control de la Derecha vk_ralt Tecla Alt de la Derecha

Por ejemplo, asumiendo que tienes un objeto que el usuario puede controlar con las teclas del cursor puedes colocar el siguiente cdigo en el evento step del objeto:

{ if (keyboard_check(vk_left)) if (keyboard_check(vk_up)) if (keyboard_check(vk_down)) }


Claro, esto es mucho ms fcil si simplemente lo ponemos en los eventos del teclado.

x -= 4; y -= 4; y += 4;

if (keyboard_check(vk_right)) x += 4;

Hay algunas funciones adicionales relacionadas con la interaccin con el teclado

keyboard_clear(key) Limpia el estado de la tecla mencionada en key. Esto significa que no generar eventos de teclado hasta
que se vuelva a presionar.

io_clear()

Limpia todos los estados del teclado y del ratn. Maneja la entrada y salida por parte del usuario, actualizando los estados del teclado y del ratn. Espera hasta que el usuario presione una tecla del teclado.

io_handle()

keyboard_wait()

El ratn
Para ms interaccin, las siguientes variables y funciones existes:

mouse_x* Coordenada X del ratn. No puede cambiarse. mouse_y* Coordenada Y del ratn. No puede cambiarse. mouse_button Botn del ratn presionado actualmente. Como valores puedes emplear mb_none (ningn
botn),

mb_any (cualquier botn), mb_left (botn izquierdo), mb_middle (botn central) o mb_right (botn derecho).

mouse_lastbutton ltimo botn presionado del ratn.


Para chequear si un botn particular del ratn se presion puedes usar estas funciones. Esto es muy til cuando muchas teclas se presionan simultneamente.

mouse_check_button(numb) Indica si se presiona el botn del ratn numb (como valores de numb emplea mb_none, mb_left,
mb_middle, o mb_right).

mouse_check_button_pressed(numb) Indica si el botn del ratn fue presionado desde el ultimo step. mouse_check_button_released(numb) Indica si el botn del ratn se solt desde el ltimo step.
Hay funciones adicionales relacionadas con la interaccin con el ratn:

mouse_clear(button) limpia el estado del botn del Mouse. Esto significa que no se generarn mas eventos del ratn hasta que
se vuelva a presionar otra vez.

io_clear()

Limpia todos los estados del teclado y del ratn. Maneja la entrada y salida por parte del usuario, actualizando los estados del teclado y del ratn.

io_handle()

mouse_wait()Espera hasta que el usuario presione un botn en el ratn.

El joystick
Tenemos algunos eventos asociados con los joysticks (mandos de control, controles, palancas de mando, palancas de juego, etc.) Pero para tener control total sobre los joysticks hay un grupo de funciones para tratarlos. El Game Maker soporta hasta dos joystick. Por lo que todas estas funciones reciben el id del joystick como argumento.

joystick_exists(id) joystick_name(id) joystick_axes(id)

Indica si el joystick id (1 o 2) existe

Devuelve el nombre del joystick. Devuelve el nmero de ejes del joystick. Devuelve el nmero de botones del joystick. Indica si el joystick tiene capacidades point-of-view. Devuelve el cdigo (vk_numpad1 a vk_numpad9) correspondiente a la direccin del joystick id (1 o

joystick_buttons(id) joystick_has_pov(id)

joystick_direction(id)
2).

joystick_check_button(id,numb) joystick_xpos(id) joystick_ypos(id) joystick_zpos(id) joystick_rpos(id) joystick_upos(id) joystick_vpos(id) joystick_pov(id)

Indica si el botn del joystick id es presionado (numb est en el intervalo 1-32).

Devuelve la posicin (-1 a 1) del eje-x del joystick id. Devuelve la posicin y del joystick id. Devuelve la posicin z del joystick id (si es que cuenta con eje z). Devuelve la posicin del timn del joystick id (del cuarto eje). Devuelve la posicin u del joystick id (del quinto eje). Devuelve la posicin v del joystick id (del sexto eje).

Devuelve la posicin del point-of-view del joystick id. Este es un ngulo entre 0 y 360 grados. 0 es adelante, 90

a la derecha, 180 atrs y 270 a la izquierda. Cuando no se especifica la direccin del point-of-view devuelve 1.

Grficos del juego


Una parte importante de un juego son los grficos. Game Maker normalmente toma el control de casi todo y en juegos sencillos no hay necesidad de preocuparse. Pero a veces necesitas tomar mayor control sobre ellos. Para algunos aspectos hay acciones, pero mediante cdigo puedes controlar muchos ms aspectos. Este captulo muestra todas las variables y funciones disponibles para esto y da ms informacin sobre lo que est sucediendo realmente.

La informacin sobre la parte grfica se encuentra en las secciones siguientes: Imgenes y sprites Fondos Dibujando sprites y fondos Dibujando formas Fuentes y texto Funciones avanzadas de dibujo Dibujando superficies Tiles El display La ventana Vistas Transiciones Redibujando la pantalla

Imgenes y Sprites
Cada objeto tiene un sprite asociado. Puede ser una imagen simple o compuesta por varias subimgenes. Para cada instancia del objeto, el programa dibuja la imagen correspondiente en la pantalla, con su origen (definido en las propiedades de sprite) en la posicin (x,y) de la instancia. Cuando hay varias subimgenes, sta se reproduce a travs de las subimgenes para crear un efecto de animacin. Hay varias variables que afectan en el modo en que se dibuja la imagen. Estas pueden sert utilizadas para cambiar los efectos. Cada instancia posee las siguientes variables:

visible : Si visible es cierto (1) la imagen se dibuja,

en caso contrario no se dibuja. Las instancias invisibles aun son activas y crean

eventos de colisin; Simplemente no puedes verlas. Definir la visibilidad como falso es til para por ejemplo objetos controladores (hazlos tambin no slidos para evitar eventos de colisin con ellos) o palancas ocultas.

sprite_index Este es el ndice del sprite actual para la instancia. Puedes cambiarlo para asignar un sprite diferente a la instancia.
Como valor puedes usar los nombres de los diferentes sprites que definas . Cambiando el sprite no cambias el ndice de la subimagen actual.

sprite_width* Indica el ancho del sprite. Este valor no puede ser cambiado, pero puedes utilizarlo.

sprite_height* Indica el alto del sprite. Este valor no puede ser cambiado, pero puedes utilizarlo. sprite_xoffset* Indica el offset horizontal del sprite, como esta definido en las propiedades del sprite. Este valor no puede ser
cambiado, pero puedes utilizarlo.

sprite_yoffset* Indica el offset horizontal del sprite, como esta definido en las propiedades del sprite. Este valor no puede ser
cambiado, pero puedes utilizarlo.

image_number* El numero de subimgenes del sprite actual de la instancia (no puede ser cambiado). image_index Cuando la imagen tiene varias subimgenes, el programa las recorre cclicamente. Esta variable indica la subimagen
dibujada actualmente (estn numeradas desde 0). Puedes cambiar la imagen actual cambiando esta variable. EL programa continuar reproduciendo el ciclo de subimgenes, pero comenzando desde el nuevo ndice. (El valor puede ser fraccional. En este caso, se redondea siempre hacia abajo para obtener el ndice de la subimagen dibujada.

image_speed La velocidad con que se reproduce el ciclo de subimgenes. Un valor de 1 indica que en cada paso se muestra la
siguiente subimagen . Valores menores, reducirn la velocidad de visualizacin de la animacin, dibujando la misma subimagen varias veces. Valores mayores harn que se salten subimgenes para aumentar la velocidad de la animacin. A veces quieres que una subimagen en particular sea visible y no quieres que el programa muestre todas las dems subimgenes. Puedes conseguir esto definiendo la velocidad igual a 0 y eligiendo la subimagen correcta. Por ejemplo, asumamos que tenemos un objeto que puede rotar y has creado un sprite que tiene varias subimgenes para las diferentes orientaciones (en sentido contrario a las agujas del reloj) Puedes introducir el siguiente cdigo en el evento step:

{ image_index = direction * image_number/360; image_speed = 0; } depth Normalmente las imgenes son dibujadas en el orden en que se crean las instancias. Puedes cambiar este orden cambiando la
profundidad de la imagen. El valor por defecto es 0, hasta que le introduzcas un valor diferente en las propiedades del objeto. Cuanto mayor es el valor ms al fondo se dibujar la instancia. (Tambin puedes utilizar valores negativos.) Las instancias con mayor profundidad permanecern debajo de las instancias con menor profundidad. Definiendo la profundidad garantizamos que las instancias son dibujadas en el orden que queremos. (Ej. El avin sobre la nube). Las instancias de fondo tendrn una alta profundidad (valor positivo) y las imgenes frontales tendrn una profundidad baja (valores negativos).

image_xscale Un valor de escala para hacer

mayores o menores las imgenes. Un valor de 1 indica el tamao normal. Debes separar

la escala horizontal xscale y la vertical yscale. Cambiando la escala tambin cambian el ancho y el alto de la imagen e influye en los eventos de collisin, como podras esperar. Cambiar la escala puede ser utilizado para dar un efecto 3-D. Puedes utilizar un valor de -1 para invertir horizontalmente la imagen.

image_yscale Escala vertical yscale. 1 no modifica el tamao. Puedes utilizar un valor de -1 para invertir verticalmente la imagen. image_angle El ngulo con que se rota la imagen. Se especifica en grados en sentido contrario a las agujas del reloj.
indica que no hay rotacin. Esta variable solo puede modificarse en la versin registrada! Un valor de 0

image_alpha El valor de transparencia (alpha) que se aplica al dibujar la imagen. Un valor de 1 es la opacidad normal; un valor de 0
es totalmente transparente.

image_blend

Teido de color que se aplica al dibujar la imagen. Un valor de color blanco (c_white) es el que se utiliza por defecto.

Cuando especificas un color diferente, la imagen se tie de dicho color. Esto puede ser utilizado para colorear el personaje en tiempo de ejecucin. Esta variable solo puede modificarse en la versin registrada!

bbox_left* Lado izquierdo de la caja de contorno utilizada por la imagen de la instancia (Se toma en cuenta el escalado). bbox_right* Lado derecho de la caja de contorno utilizada por la imagen de la instancia bbox_top* parte superior de la caja de contorno utilizada por la imagen de la instancia. bbox_bottom*
parte inferior de la caja de contorno utilizada por la imagen de la instancia.

Fondos
Cada room (cuarto) puede tener hasta 8 fondos. As mismo, tambin puede tener un color de fondo. Todos los aspecto de estos fondos se pueden cambiar con cdigo usando las siguientes variables (observa que algunas son vectores con un rango de 0 a 7; este nmero indica el fondo al que se aplicarn los cambios):

background_color Color de fondo para el cuarto. background_showcolor Indica si se debe limpiar la pantalla con el color de fondo. background_visible[0..7] Indica si el fondo indicado es visible o no. Por ejemplo, para indicar que el fondo nmero 3 no debe
mostrarse, deberamos hacerlo as: background_visible[3]=false;

background_foreground[0..7] Indica si el fondo est en primer plano (se dibujar encima de todo lo dems, tapando todo lo
que quede por debajo).

background_index[0..7] Imagen de fondo asignada al fondo indicado. background_x[0..7] Posicin x del fondo. background_y[0...7] Posicin y del fondo. background_width[0...7]* Anchura de la imagen del fondo. background_height[0...7]* Altura de la imagen del fondo. background_htiled[0..7] Indica si el fondo debe repetirse horizontalmente para llenar toda la pantalla. background_vtiled[0..7] Indica si el fondo debe repetirse verticalmente para llenar toda la pantalla. background_xscale[0..7] Factor de escalado horizontal del fondo: un nmero entre 0 y 1 har la imagen ms pequea y un
nmero mayor que 1 la har ms grande. (Debe ser un valor positivo)

background_yscale[0..7] Factor de escalado vertical del fondo: un nmero entre 0 y 1 har la imagen ms pequea y un
nmero mayor que 1 la har ms grande. (Debe ser un valor positivo)

background_hspeed[0..7] Velocidad horizontal de scrolling del fondo, en pxeles por step. El scrolling es el movimiento del
fondo, por lo tanto esto se refiere al movimiento horizontal del fondo.

background_vspeed[0..7] Velocidad vertical de scrolling del fondo, en pxeles por step. El scrolling es el movimiento del fondo,
por lo tanto esto se refiere al movimiento vertical del fondo.

background_blend[0..7] Color de teido usado al dibujar el fondo. El valor por defecto es c_white. Esta variable slo se
puede usar en la versin registrada!

background_alpha[0..7] Factor de transparencia usado al dibujar el fondo. 1 es el valor normal (imagen totalmente opaca) y 0
es totalmente transparente (utiliza valores intermedios para dibujar fondos parcialmente transparentes).

Dibujando sprites y fondos


Normalmente los objetos tienen un sprite asociado que se dibuja en la pantalla. Pero tambin puedes usar el evento draw. para dibujar otras cosas. Esta seccin y las dos siguientes te darn informacin sobre este aspecto. Primero de todo, hay un grupo de funciones que sirven para dibujar sprites y fondos de distintas maneras. Estas funciones te dan un gran control sobre la apariencia grfica del juego y te permiten hacer cosas como dibujar slo un trozo de un fondo, rotar un sprite...

draw_sprite(sprite,subimg,x,y) Dibuja la subimagen subimg (-1 = subimagen actual) del sprite con
ndice

sprite sprite

con su origen en la posicin (x,y) sin teirlo de ningn color y sin usar transparencia. del sprite con

draw_sprite_stretched(sprite,subimg,x,y,w,h) Dibuja la subimagen subimg


ndice de forma que llene la regin con esquina superior-izquierda en (x,y), anchura

w y altura h.

draw_sprite_tiled(sprite,subimg,x,y) Dibuja el sprite repitindolo horizontal y verticalmente de forma que llene toda
la pantalla. (x,y) es la posicin donde se dibuja una de las copias del sprite.

draw_sprite_part(sprite,subimg,left,top,width,height,x,y) Dibuja la parte del sprite indicada con su


esquina superior izquierda en (x,y). La parte del sprite que queremos dibujar se indica con superior-izquierda) y

left

top(coordenadas de la esquina

width y height (anchura y altura del trozo que queremos dibujar).

draw_background(back,x,y) Dibuja el fondo en la posicin (x,y), sin teirlo de ningn color y sin transparencia. draw_background_stretched(back,x,y,w,h) Dibuja el fondo escalado de forma que ocupe la regin indicada. draw_background_tiled(back,x,y) Dibuja el fondo repitindolo en horizontal y vertical de forma que llene toda la
pantalla.

draw_background_part(back,left,top,width,height,x,y) Dibuja el trozo indicado del fondo con su esquina


superior-izquierda en la posicin (x,y).

Las funciones siguientes son versiones extendidas de las funciones anteriores. Estas funciones slo estn disponibles en la versin registrada de Game Maker.

draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha) Dibuja el sprite escalado con


factores

xscale (horizontal) e yscale

(vertical) y rotado

rot grados en sentido antihorario. color indica el color con el que alpha indica el factor de

queremos teir el sprite (usa el color blanco c_white si no quieres teir el sprite de ningn color) y

transparencia. Un valor igual a 0 hace la imagen totalmente transparente y un valor igual a 1 la hace totalmente opaca. Con valores intermedios conseguirs que la imagen sea parcialmente transparente. Con esta funcin se pueden crear efectos muy espectaculares como

explosiones semi-transparentes.

draw_sprite_stretched_ext(sprite,subimg,x,y,w,h,color,alpha) Dibuja el sprite escalado de forma que


ocupe la regin indicada: esquina superior izquierda en (x,y), anchura transparencia.

w y altura h. color indica el color de teido y alpha el factor de

draw_sprite_tiled_ext(sprite,subimg,x,y,xscale,yscale,color,alpha) Dibuja el sprite repetido de


forma que cubra toda la pantalla con factores de escala, color de teido y factor de transparencia.

draw_sprite_part_ext(sprite,subimg,left,top,width,height,x,y,xscale,yscale,color,al pha) Dibuja la parte indicada del sprite con factores de escala, color de teido y factor de transparencia. draw_sprite_general(sprite,subimg,left,top,width,height,x,y,xscale,yscale,rot,c1,c2 ,c3,c4,alpha) La funcin ms general para dibujar sprites. Dibuja la parte indicada de la subimagen subimg(-1 = subimagen
actual) del sprite con ndice sprite situando su esquina superior-izquierda en la posicin (x,y) y con factores de escala, ngulo de rotacin, un color de teido para cada una de las 4 esquinas del sprite (en el orden arriba-izquierda, arriba-derecha, abajo-derecha y abajo-izquierda) y un factor de transparencia. Observa que el sprite se rotar sobre su esquina superior-izquierda y no sobre su origen.

draw_background_ext(back,x,y,xscale,yscale,rot,color,alpha)
teido del color especificado (usa c_white si no quieres teirlo) y con factor de transparencia

Dibuja el fondo escalado, rotado,

alpha (0-1).

draw_background_stretched_ext(back,x,y,w,h,color,alpha) Dibuja el fondo escalado de forma que ocupe


la regin indicada con color de teido y factor de transparencia.

draw_background_tiled_ext(back,x,y,xscale,yscale,color,alpha) Dibuja el fondo repetido de forma


que ocupe todo el cuarto con factores de escala, color de teido y factor de transparencia.

draw_background_part_ext(back,left,top,width,height,x,y,xscale,yscale,color,alpha)
Dibuja la parte indicada del fondo situando su esquina superior-izquierda en la posicin (x,y) con factores de escala, color de teido y factor de transparencia.

draw_background_general(back,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c 4,alpha) La funcin ms general para dibujar fondos. Dibuja la parte indicada del fondo situando su esquina superior-izquierda en la
posicin (x,y) con factores de escala, ngulo de rotacin, un color de teido para cada una de las cuatro esquinas (en el orden arribaizquierda, arriba-derecha, abajo-derecha y abajo-izquierda) y un factor de transparencia. Observa que el sprite se rotar sobre su esquina superior-izquierda del trozo indicado del fondo.

Dibujando formas
Game Maker dispone de una amplia coleccin de funciones para dibujar diferentes formas. Tambin hay otras funciones para dibujar texto (consulta el captulo siguiente). Estas funciones de dibujo slo se pueden usar en el evento draw ya que no tienen sentido si se colocan en otro evento. Debes tener en cuenta que las colisiones entre las instancias se determinan segn sus sprites y sus mscaras de colisin y no segn lo que cada instancia dibuja en la pantalla. Las funciones siguientes sirven para dibujar las formas bsicas:

draw_clear(col) Pinta todo el cuarto del color especificado. draw_clear_alpha(col,alpha) Pinta todo el cuarto del color especificado y con el factor de transparencia indicado (muy til

para superficies).

draw_point(x,y) Dibuja un punto en (x,y) en el color de dibujo actual. draw_line(x1,y1,x2,y2) Dibuja una lnea desde (x1,y1) hasta (x2,y2). draw_rectangle(x1,y1,x2,y2,outline) Dibuja un rectngulo. outline indica si slo debe dibujarse el borde (true) o
si el rectngulo debe estar relleno (false).

draw_roundrect(x1,y1,x2,y2,outline) Dibuja un rectngulo redondeado. outline indica si slo debe dibujarse el


borde (true) o si el rectngulo debe estar relleno (false).

draw_triangle(x1,y1,x2,y2,x3,y3,outline) Dibuja un tringulo. outline indica si slo debe dibujarse el borde


(true) o si debe estar relleno (false).

draw_circle(x,y,r,outline) Dibuja un crculo con su centro en (x,y) y radio r. outline indica si slo debe dibujarse el
borde (true) o si debe estar relleno (false).

draw_ellipse(x1,y1,x2,y2,outline) Dibuja una elipse. outline indica si slo debe dibujarse el borde (true) o si
debe estar rellena (false).

draw_arrow(x1,y1,x2,y2,size) Dibuja una flecha desde (x1,y1) hasta (x2,y2). size indica el tamao de la flecha en
pxeles.

draw_button(x1,y1,x2,y2,up) Dibuja un botn. up indica si est pulsado (0) o no (1). draw_path(path,x,y,absolute) Con esta funcin puedes dibujar el path indicado en el cuarto con su comienzo en la posicin
(x,y). Si

absolute es true el path se dibuja en la posicin en la que fue definido y los valores de x e y son ignorados.

draw_healthbar(x1,y1,x2,y2,amount,backcol,mincol,maxcol,direction,showback,showbord er) Con esta funcin puedes dibujar una barra de vida (o una barra que indique cualquier otra cosa como poder, magia,). Los
parmetros x1, y1, x2 e y2 indican el rea total de la barra. entre 0 y 100).

amount indica el porcentaje de la barra que debe estar relleno (debe estar

backcol es el color de fondo de la barra. mincol y maxcol indican el color cuando el porcentaje de llenado direction es la direccin en la que la barra se dibuja: 0 significa que la showback indica si debe mostrarse una caja de fondo

(parmetro amount) es 0 y 100 respectivamente. Para un porcentaje intermedio el color se interpola entre estos dos. As puedes crear fcilmente una barra que vaya de verde a rojo, por ejemplo.

barra est fijada a la izquierda, 1 a la derecha, 2 arriba y 3 abajo. Finalmente, y

showborder si la caja de fondo y la barra deben tener un borde negro.

Muchas de las funciones anteriores utilizan los colores y transparencia generales de dibujo que pueden ser cambiados con estas funciones:

draw_set_color(col) Indica el color que debe usarse para dibujar primitivas. draw_set_alpha(alpha) Indica el factor de transparencia que debe usarse para dibujar primitivas. Debe estar comprendido
el rango 0-1. 0 significa totalmente transparente y 1 totalmente opaco. en

draw_get_color() Devuelve el color general de dibujo utilizado para dibujar primitivas. draw_get_alpha()Devuelve el factor de transparencia general de dibujo utilizado para dibujar primitivas.
Hay un gran rango de colores predefinidos:

c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow
Sin embargo, tambin puedes usar las funciones siguientes para crear tus propios colores:

make_color_rgb(red,green,blue) Devuelve un color con los componentes indicados de rojo, verde y azul. Los valores
indicados deben estar entre 0 y 255 (ambos inclusive).

make_color_hsv(hue,saturation,value) Devuelve un color con los componentes indicados de brillo, saturacin y valor.
Los valores indicados deben estar entre 0 y 255 (ambos inclusive).

color_get_red(col) Devuelve el componente de rojo del color. color_get_green(col) Devuelve el componente de verde del color. color_get_blue(col) Devuelve el componente de azul del color. color_get_hue(col) Devuelve el componente de brillo del color. color_get_saturation(col) Devuelve el componente de saturacin del color. color_get_value(col) Devuelve el componente de valor del color. merge_color(col1,col2,amount) Devuelve un color resultante de mezclar los dos colores indicados. La mezcla se determina
por el parmetro

amount: un valor igual a 0 corresponde a col1, un valor de 1 corresponde a col2 y un valor intermedio hace que se

mezclen los dos colores.

Tambin puedes utilizar las siguientes funciones miscelneas:

draw_getpixel(x,y) Devuelve el color del pxel en la posicin (x,y) del cuarto. Esta funcin no es muy rpida, as que sala con
cuidado.

screen_save(fname) Salva una imagen bmp de la pantalla en el archive especificado. til para crear screenshots. screen_save_part(fname,x,y,w,h) Salva la parte de la pantalla indicada a un archive bmp.

Fuentes y texto
A veces necesitas dibujar texto. Para ello, primero debes indicar la fuente que quieres usar. Las fuentes se pueden definir creando un recurso de fuente (directamente en Game Maker o usando las funciones de modificacin de recursos). Para dibujar texto disponemos de varias funciones distintas. En todas ellas debes indicar el texto a ser dibujado y la posicin del mismo. Adems, existen dos funciones para definir la alineacin del texto en horizontal y vertical respecto a esa posicin.

Para dibujar texto disponemos de las funciones siguientes:

draw_set_font(font) Indica la fuente que debe usarse para dibujar texto. Puedes indicar el valor -1 para usar la fuente por
defecto (Arial 12).

draw_set_halign(halign) Indica la alineacin horizontal del texto. Debes indicar uno de los siguientes valores: fa_left fa_right
izquierda centrada derecha

fa_center

draw_set_valign(valign) Indica la alineacin vertical del texto. Debes indicar uno de los siguientes valores: fa_top
arriba centrada abajo

fa_middle fa_bottom

draw_text(x,y,string) Dibuja el texto indicado en la posicin (x,y) usando el color y el factor de transparencia de dibujo
generales. Los smbolo #, chr(13) o chr(10) (tecla ENTER o de salto de lnea) son interpretados como caracteres de salto de lnea. De esta forma puedes dibujar textos de varias lneas (Usa \# para dibujar el smbolo #).

draw_text_ext(x,y,string,sep,w) Similar a la funcin anterior pero ahora puedes especificar 2 cosas ms. Primero de
todo,

sep indica la distancia de separacin entre las lneas del texto si es que tiene varias lneas. Usa -1 para obtener la distancia por w indica la anchura del texto en pxeles. Las lneas ms largas que esta distancia se dividen en nuevas lneas cuando

defecto. Por ltimo,

encuentren un espacio en el texto o el smbolo -. Utiliza el valor -1 si no quieres que el texto se divida automticamente en varias lneas.

string_width(string) Anchura que el texto indicado ocupara si se dibujara con la fuente actual usando la
funcin

draw_text(). Puedes usar esta funcin para posicionar los grficos con precisin. draw_text(). Puedes usar esta funcin para posicionar los grficos con precisin.

string_height(string) Altura que el texto indicado ocupara si se dibujara con la fuente actual usando la
funcin

string_width_ext(string,sep,w) Anchura que el texto indicado ocupara si se dibujara con la fuente actual usando la
funcin

draw_text_ext(). Puedes usar esta funcin para posicionar los grficos con precisin. draw_text_ext(). Puedes usar esta funcin para posicionar los grficos con precisin.

string_height_ext(string,sep,w) Altura que el texto indicado ocupara si se dibujara con la fuente actual usando la
funcin

Las siguientes funciones te permiten dibujar texto escalado o rotado e incluso aplicarle gradientes de color. Estas funciones slo estn disponibles en la versin registrada de Game Maker!

draw_text_transformed(x,y,string,xscale,yscale,angle) Dibuja el texto indicado en la posicin (x,y) con


factores de escala y rotado

angle grados en sentido antihorario.

draw_text_ext_transformed(x,y,string,sep,w,xscale,yscale,angle) Combina las


funciones

draw_text_ext() y draw_text_transformed(). De esta forma es posible dibujar textos multilneas rotados o

escalados.

draw_text_color(x,y,string,c1,c2,c3,c4,alpha) Dibuja el texto indicado aplicando a cada esquina el color


indicado en el orden arriba-izquierda, arriba-derecha, abajo-derecha, abajo-izquierda y con factor de transparenciaalpha (0-1).

draw_text_ext_color(x,y,string,sep,w,c1,c2,c3,c4,alpha) Similar a draw_text_ext() pero con


vrtices coloreados.

draw_text_transformed_color(x,y,string,xscale,yscale,angle,c1,c2,c3,c4,alpha) Similar
a

draw_text_transformed()pero con vrtices coloreados.

draw_text_ext_transformed_color(x,y,string,sep,w,xscale,yscale,angle,c1,c2,c3,c4,al pha) Similar a draw_text_ext_transformed()pero con vrtices coloreados.

Funciones avanzadas de dibujo


Esta funcionalidad slo est disponible en la versin registrada de Game Maker

En los captulos anteriores hemos descrito las funciones bsicas de dibujo. En este captulo veremos funciones ms avanzadas que te otorgan muchas ms posibilidades para crear los grficos de tus juegos. Primero, hay unas funciones que sirven para dibujar formas coloreadas con gradientes o efectos de difuminado. Despus veremos las funciones que sirven para dibujar polgonos bsicos y por ltimo veremos la forma de dibujar polgonos texturizados.

Las siguientes funciones son versiones extendidas de las funciones de dibujo bsicas. Todas ellas admiten parmetros para el color, por lo que ninguna de estas funciones usar el color general de dibujo.

draw_point_color(x,y,col1) Dibuja un punto en la posicin (x,y) con el color indicado. draw_line_color(x1,y1,x2,y2,col1,col2) Dibuja una lnea desde (x1,y1) hasta (x2,y2), interpolando el color
entre

col1 y col2.

draw_rectangle_color(x1,y1,x2,y2,col1,col2,col3,col4,outline) Dibuja un rectngulo. Los cuatro

colores indican los colores de los vrtices superior-izquierdo, superior-derecho, inferior-derecho e inferior-izquierdo respectivamente.

outline indica si slo debe dibujarse el contorno del rectngulo (true) o si ste debe estar relleno (false). col2 en el borde. outline indica si slo debe dibujarse el contorno del rectngulo (true) o si ste debe

draw_roundrect_color(x1,y1,x2,y2,col1,col2,outline) Dibuja un rectngulo redondeado. col1 es el color


en el centro del rectngulo y estar relleno (false).

draw_triangle_color(x1,y1,x2,y2,x3,y3,col1,col2,col3,outline) Dibuja un tringulo. Los tres colores


son los colores en los vrtices del tringulo (el color se interpola en las dems zonas entre estos tres colores).outline indica si slo debe dibujarse el contorno del tringulo (true) o si ste debe estar relleno (false).

draw_circle_color(x,y,r,col1,col2,outline) Dibuja un crculo en (x,y) con radio r. col1 es el color en el


centro y

col2 en el borde. outline indica si slo debe dibujarse el contorno del crculo (true) o si ste debe estar relleno (false).

draw_ellipse_color(x1,y1,x2,y2,col1,col2,outline) Dibuja una elipse. col1 es el color en el centro


y

col2 en el borde. outline indica si slo debe dibujarse el contorno de la elipse (true) o si ste debe estar rellena (false).

Tambin puedes dibujar primitivas ms complicadas, pero esto se hace de forma diferente. Primero debes especificar el tipo de primitiva que quieres dibujar. Despus especificas los vrtices y finalmente la terminas. En este momento se dibuja la primitiva. Existen seis tipos de primitivas:

pr_pointlist Los vrtices son un grupo de puntos. pr_linelist Los vrtices son un grupo de lneas. Cada pareja de puntos forma una lnea, por lo que debe haber un nmero par de
puntos.

pr_linestrip Los vrtices forman una poli-lnea de forma que el primer punto se conecta al segundo, el segundo al tercero, etc...El
ltimo punto no se conecta al primero. Para conseguir esto, debes especificar otra vez el primer punto al final de la primitiva.

pr_trianglelist Los vrtices son un grupo de tringulos. Cada trena de puntos forma un tringulo, luego el nmero de puntos
debe ser un mltiplo de 3.

pr_trianglestrip Los vrtices son un grupo de tringulos, pero esta vez

de forma distinta. Los tres primeros puntos forman el

primer tringulo. Los dos ltimos puntos de este tringulo junto con el siguiente punto forman el segundo tringulo y as sucesivamente. Es decir, cada nuevo punto especifica un nuevo tringulo conectado por un lado al tringulo anterior.

pr_trianglefan Similar a la funcin anterior, pero esta vez el primer punto forma parte de todos los tringulos. Cada nuevo punto
especifica un nuevo tringulo formado tambin por el punto anterior y por el primer punto, que ya hemos dicho que est presente en todos los tringulos.

Para dibujar primitivas disponemos de las siguientes funciones:

draw_primitive_begin(kind) Comenzar a definir una primitiva del tipo indicado. draw_vertex(x,y) Aade el vrtice (x,y) a la primitiva, usando los valores generales de dibujo de color y transparencia. draw_vertex_color(x,y,col,alpha) Aade el vrtice (x,y) a la primitiva, con los valores de color y transparencia

especificados. De esta forma puedes crear primitivas que cambian gradualmente de color u opacidad.

draw_primitive_end() Terminar la definicin de la primitiva. En este momento es cuando se dibuja la primitiva.


Finalmente, es posible dibujar primitivas usando sprites o fondos como texturas. Cuando usas una textura la imagen se sita sobre la primitiva y se escala para que su tamao encaje con el de la primitiva. Las texturas se usan para dar detalle a las primitivas, como por ejemplo, una pared de ladrillos. Para usar una textura, primero debes obtener su id. Esto se realiza con las funciones siguientes:

sprite_get_texture(spr,subimg) Devuelve la id de la textura correspondiente a la subimagen subimg del sprite


indicado.

background_get_texture(back) Devuelve la id de la textura correspondiente al fondo indicado.


Una textura seleccionada puede que no est cargada en la memoria de video. Normalmente el sistema se encarga de hacerlo automticamente pero puede ser que a veces decidas encargarte t mismo de esto. Puedes hacerlo con las funciones siguientes:

texture_preload(texid) Carga la textura en la memoria de video inmediatamente. texture_set_priority(texid,prio) Cuando no hay memoria grfica suficiente algunas texturas se eliminarn
temporalmente para hacer sitio a otras que se necesiten. Las texturas con menor prioridad se eliminarn primero. Por defecto todas las texturas tienen prioridad 0 pero con esta funcin puedes especificar una prioridad distinta para cada una (usa slo valores positivos).

Para aadir una textura a una primitiva debes especificar dnde se situar cada parte de la textura sobre la primitiva. Las posiciones en la textura se indican con valores entre 0 y 1, pero esto nos presenta un problema. Los tamaos de las texturas siempre deben ser potencias de 2 (por ejemplo, 32x32 o 64x64). Si quieres usar sprites o fondos como texturas debes asegurarte de que cumplan esta restriccin. Si no, la textura ser completamente blanca. Para hallar qu parte de la textura se est utilizando puedes utilizar las dos siguientes funciones. Ambas devuelven un valor entre 0 y 1 que indica la anchura o altura de la parte de la textura que se est usando. Usando este valor como coordenada de textura indicar el lado derecho o inferior de la textura.

texture_get_width(texid) Devuelve la anchura de la textura con la id especificada. Esta anchura ser un valor comprendido
entre 0 y 1.

texture_get_height(texid) Devuelve la altura de la textura con la id especificada. Esta altura ser un valor comprendido
entre 0 y 1.

Para dibujar texturas puedes usar las siguientes funciones:

draw_primitive_begin_texture(kind,texid) Comienza la definicin de una primitiva del tipo indicado con la textura
indicada.

draw_vertex_texture(x,y,xtex,ytex) Aade el vrtice (x,y) a la primitiva con la posicin (xtex,ytex) en la textura,


usando los valores generales de dibujo de color y transparencia.

xtex e ytex deben estar comprendidos entre 0 y 1 pero tambin

pueden usarse valores mayores para hacer que la textura se repita (ver ms abajo).

draw_vertex_texture_color(x,y,xtex,ytex,col,alpha) Aade el vrtice (x,y) a la primitiva con la posicin

(xtex,ytex) en la textura, usando le color de teido y transparencia indicados.

draw_primitive_end() Termina la descripcin de la primitiva, dibujndola.


Existen tres funciones que influencian la forma en que se dibujan las texturas:

texture_set_interpolation(linear) Indica si debe usarse interpolacin lineal (true) o utilizar el pxel ms cercano
(false). La interpolacin lineal suele conseguir texturas ms suaves pero a veces pueden parecer un poco borrosas o hacer que le juego se ralentice. Esta propiedad tambin afecta a la forma en que se dibujan los sprites y fondos. Por defecto es false (esta propiedad tambin puede cambiarse desde las opciones globales del juego).

texture_set_blending(blend) Indica si debe usarse blending para el color y la transparencia. Blending es la capacidad para
que se mezclen. As por ejemplo, un sprite puede teirse de un color. Por defecto es true. Activndola se puede conseguir que el juego vaya ms rpido en mquina ms viejas. Esta propiedad tambin afecta a la forma en que se dibujan los sprites y fondos.

texture_set_repeat(repeat) Indica si se permite que la textura se repita. Como hemos dicho las coordenadas de textura
deben indicarse en el rango 0-1. Si se especifica un valor mayor que 1, el resto no se dibuja. Sin embargo, si ponemos esta propiedad a true la textura se repetir hasta llenar la primitiva por completo. Observa que los sprites y fondos siempre se dibujan sin repeticin, luego cuando se dibuje un sprite o un fondo este valor volver a ponerse a false (valor por defecto).

Hay dos funciones ms que son muy tiles para dibujar texturas. Normalmente, las primitivas se mezclan con el fondo usando el factor de transparencia. Pero puedes controlar la forma en que sucede esto. Por ejemplo, puedes indicar si los colores de la primitiva deben sumarse a los del fondo o restarse. De esta forma puedes crear puntos de luz o sombras. Tambin es posible elegir el mximo entre el nuevo color y el color original para evitar efectos de saturacin que ocurren al sumar varios colores. Observa que ni al restar, ni al calcular el mximo se toma en cuenta el valor de transparencia totalmente (DirectX no lo permite), as que debes asegurarte de que el rea alrededor es negra. Como ya hemos dicho, hay dos funciones para esto. La primera te da las cuatro opciones ya descritas. La segunda te da muchas ms opciones. Es muy recomendable que experimentes con estas funciones ya que se pueden crear efectos muy espectaculares como explosiones, sombras, efectos de luz, halos...

draw_set_blend_mode(mode) Indica el modo de mezcla a usar de entre los


siguientes:

bm_normal, bm_add

(suma),

bm_subtract

(resta), y

bm_max

(mximo). No olvides volver a poner el modo

normal cuando termines lo que ests haciendo por que esto afectar a la forma en que se dibujan los sprites y fondos.

draw_set_blend_mode_ext(src,dest) Indica el modo de mezcla que se debe usar para la fuente y el destino. El color
resultante se calcula aplicando a cada color (fuente y destino) un factor diferente. Estos factores de mezcla se especifican con esta funcin. Los colores de fuente y el destino estn formados por las componentes de rojo, verde, azul y transparencia. As, llamamos a los componentes de la fuente (Rf,Gf,Bf,Af) y a los del destino (Rd, Gd, Bd, Ad). Todos estos factores se encuentran entre 0 y 1. Los factores de mezcla que puede usar en esta funcin son:

bm_zero: El factor de mezcla es (0, 0, 0, 0). bm_one: El factor de mezcla es (1, 1, 1, 1). bm_src_color: El factor de mezcla es (Rf, Gf, Bf, Af). bm_inv_src_color: El factor de mezcla es (1Rf, 1Gf, 1Bf, 1Af).

bm_src_alpha: El factor de mezcla es (Af, Af, Af, Af). bm_inv_src_alpha: El factor de mezcla es (1Af, 1Af, 1Af, 1Af). bm_dest_alpha: El factor de mezcla es (Ad, Ad, Ad, Ad). bm_inv_dest_alpha: El factor de mezcla es (1Ad, 1Ad, 1Ad, 1Ad). bm_dest_color: El factor de mezcla es (Rd, Gd, Bd, Ad). bm_inv_dest_color: El factor de mezcla es (1Rd, 1Gd, 1Bd, 1Ad). bm_src_alpha_sat: El factor de mezcla es (f, f, f, 1); f = min(Af, 1Ad).

Por ejemplo, el modo de mezcla normal pone la fuente a bm_src_alpha y el destino a bm_inv_src_alpha. No olvides volver a poner el modo normal cuando termines porque si no los sprites y fondos se dibujarn con el nuevo modo.

Dibujar primitivas texturizadas es un poco complicado pero se consiguen resultados geniales. Puedes incluso crear juegos en falso 3D.

Dibujando superficies
Esta funcionalidad slo est disponible en la versin registrada de Game Maker

En algunas situaciones puede que no quieras dibujar directamente en la pantalla sino en un lienzo que ms tarde puedas usar para dibujar otras cosas. Por ejemplo, puedes querer que el usuario dibuje en la pantalla. En vez de dejar que el usuario dibuje directamente en la pantalla (lo que no funcionara, ya que la pantalla se refresca en cada step) puedes hacer que dibuje en un lienzo a parte y copiar este lienzo a la pantalla en cada paso. Tambin podras querer usar una textura que cambie con el tiempo, crear un efecto de transiciones entre cuartos, efectos de iluminacin

Las superficies hacen posibles cosas como stas. Las superficies son muy sencillas de usar: primero creas una superficie indicando su tamao. Luego indicas que vas a dibujar sobre la superficie. Desde este momento, todas las funciones de dibujo se aplicarn a la superficie. Cuando termines de dibujar, indicas que ya no vas a dibujar ms en la superficie. Ya tienes lista la superficie, ahora puedes dibujarla directamente en la pantalla, usarla como texturaConsulta el final del captulo para conocer algunos detalles con los que debes tener cuidado al trabajar con superficies.

Las siguientes funciones sirven para tratar superficies:

surface_create(w,h) Crea una superficie con la anchura y altura indicadas. La funcin devuelve la id de la superficie que debe
ser usada en las dems funciones. Observa que la superficie no se limpia (es decir, que no se pinta toda ella de un mismo color). Para esto, debes indicar que vas a dibujar en la superficie y llamar a la funcin apropiada, por ejemplo draw_clear(color).

surface_free(id) Libera la memoria utilizada por la superficie. surface_exists(id) Devuelve si la superficie con la id especificada existe.

Estas funciones nos dan informacin sobre la superficie:

surface_get_width(id) Devuelve la anchura de la superficie. surface_get_height(id) Devuelve la altura de la superficie. surface_get_texture(id) Devuelve la textura correspondiente a la superficie. Esto se puede usar para dibujar objetos
texturizados con la imagen de la superficie.

Estas dos funciones manejan el mecanismo de dibujo:

surface_set_target(id) Indica que la superficie con la id correspondiente es el objetivo de dibujo. Esto significa que todas las
funciones de dibujo que se llamen actuarn sobre la superficie. Simplemente resetea la proyeccin para que cubra slo a la superficie.

surface_reset_target() Vuelve a fijar la pantalla como objetivo de dibujo. Es decir, las funciones de dibujo que se llamen a
partir de ahora funcionarn normalmente No olvides llamar a esta funcin cuando termines de dibujar sobre la superficie!

Las funciones siguientes nos permiten manejar las superficies:

surface_getpixel(id,x,y) Devuelve el color del pxel en la posicin (x,y) de la superficie. Esta funcin no es muy rpida as
que sala con moderacin.

surface_save(id,fname) Guarda una imagen bmp de la superficie, creando para ello el archivo con el nombre indicado. Se
puede usar para crear screenshots, por ejemplo.

surface_save_part(id,fname,x,y,w,h) Igual que la funcin anterior, pero esta vez slo se copiar la parte de la
superficie que indiques.

Para dibujar superficies hay muchas posibilidades:

draw_surface(id,x,y) Dibuja la superficie en la posicin (x,y). draw_surface_stretched(id,x,y,w,h) Dibuja la superficie en la posicin (x,y) y escalada de forma que tenga la anchura
y altura indicadas.

draw_surface_tiled(id,x,y) Dibuja la superficie en la posicin (x,y) y la repite una y otra vez para que ocupe todo el cuarto. draw_surface_part(id,left,top,width,height,x,y) Dibuja la parte indicada de la superficie en la posicin
(x,y).

draw_surface_ext(id,x,y,xscale,yscale,rot,color,alpha) Dibuja la superficie en la posicin (x,y), con


factores de escala, rotacin, transparencia y tiindola con el color indicado (utiliza c_white si no quieres teir la superficie).

draw_surface_stretched_ext(id,x,y,w,h,color,alpha) Dibuja la superficie en la posicin (x,y) escalada para


que ocupe la regin indicada con factor de transparencia y tiindola del color especificado.

draw_surface_tiled_ext(id,x,y,xscale,yscale,color,alpha) Dibuja la superficie repitindola para que

ocupe todo el cuarto pero con factores de escala, transparencia y tiindola del color indicado.

draw_surface_part_ext(id,left,top,width,height,x,y,xscale,yscale,color,alpha) Dibuja la
parte indicada de la superficie en la posicin (x,y) pero con factores de escala, transparencia y color.

draw_surface_general(id,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alp ha) La funcin ms general de dibujo. Dibuja la parte indicada de la superficie con su origen en la posicin (x,y), con factores de escala,
transparencia y rotada

rot grados en sentido antihorario. Adems debes indicar 4 colores para cada una de las esquinas de la superficie

en este orden: esquina superior izquierda, esquina superior derecha, esquina inferior derecha y esquina inferior izquierda.

Por ltimo, existen dos funciones para copiar superficies:

surface_copy(destination,x,y,source) Copia la superfcie en la posicin (x,y) en la superficie indicada


por

destination. destination.

surface_copy_part(destination,x,y,source,xs,ys,ws,hs) Copia la parte indicada de la superfcie en la


posicin (x,y) en la superficie indicada por

Observa que no hay funciones para copiar parte de la pantalla a una superficie. Esto es imposible debido a la diferencia de formato entre la pantalla y las superficies. Si necesitaras usar esto puedes indicar la superficie como objetivo de dibujo y dibujar todo el room. Luego usando las funciones para copiar superficies puedes copiar partes de ella a la pantalla.

Tambin puedes crear sprites y fondos de superficies. Esto se explica con ms detalle en la seccin de modificacin de recursos.

Al usar superficies debes tener algunas cosas en cuenta:

Nunca debes cambiar el objetivo de dibujo mientras dibujas ests dibujando sobre la pantalla. Es decir, nunca uses las funciones surface_set_target() ni surface_reset_target() en el evento draw. Esto causar graves problemas en la proyeccin.

Las superficies no funcionan correctamente en modo 3D. Puedes usarlas mientras no ests en modo 3D (llamando a la funcin d3d_end() antes de usarlas) pero una vez que empieces a usar el modo 3D de nuevo las superficies se destruirn automticamente.

Por motivos de velocidad, las superficies se mantienen en la memoria de video constantemente. Como resultado de esto, podras perder las superficies al cambiar la resolucin de la pantalla o cuando salte el salvapantallas. Las superficies no se guardarn al guardar un juego.

Tiles
Como ya debes saber, puedes aadir tiles a los cuartos. Una tile es una parte de un fondo. En realidad, una tile es simplemente una imagen visible: no reaccionan ante eventos y no generan colisiones. Como resultado de esto, las tiles funcionan mucho ms rpido que los objetos.

As pues, todo lo que no sufra colisiones o no reaccione ante eventos funcionar mucho mejor si lo haces con tiles. Incluso a veces es mejor utilizar un tile para mostrar los grficos y poner por debajo un objeto invisible que se encargue de las colisiones. Para definir un tile necesitas un fondo. Sobre este fondo indicas la esquina superior (top) izquierda (left), la anchura (width) y la altura (height) de un rectngulo. La parte del fondo que queda dentro de este rectngulo pasa a ser una tile.

Puedes aadir tiles al disear el room, pero tambin puedes hacerlo mientras el juego se ejecuta. Puedes cambiar su posicin, escalarlas o hacerlas transparentes. Una tile tiene las propiedades siguientes:

background. El fondo del que se crea la tile. left, top, width, height. La parte del fondo usada en la tile (izquierda, arriba, anchura y altura). x,y. Posicin de la esquina superior izquierda del tile en el room. depth. Profundidad del tile. Puedes escoger la profundidad que quieras, haciendo que las tiles aparezcan entre varias instancias
distintas.

visible. Indica si es visible. xscale, yscale. Factores de escalado horixontal y vertical (el tamao normal es 1). blend. Color de teido usado al dibujar el tile. alpha. Factor de transparencia utilizado al dibujar el tile.

Para cambiar las propiedades de una tile debes conocer su id. Cuando creas tiles desde el editor de rooms la id se muestra en la barra inferior de informacin. Pero tambin existen funciones para conocer la id de una tile en una posicin particular.

Las funciones siguientes sirven para manejar tiles:

tile_add(background,left,top,width,height,x,y,depth) Aade una nueva tile al cuarto con las propiedades


indicadas. Esta funcin devuelve la id de la nueva tile que se puede usar ms tarde en el resto de funciones.

tile_delete(id) Elimina el tile con la id especificada. tile_exists(id) Devuelve si existe una tile con la id especificada.

Las funciones siguientes nos dan informacin sobre las tiles:

tile_get_x(id) Devuelve la posicin x de la tile con la id especificada. tile_get_y(id) Devuelve la posicin y de la tile con la id especificada. tile_get_left(id) Devuelve el valor de la propiedad left
(izquierda) de la tile con la id especificada.

tile_get_top(id) Devuelve el valor de la propiedad top (arriba) de la tile con la id especificada. tile_get_width(id) Devuelve la anchura de la tile con la id especificada. tile_get_height(id) Devuelve la altura de la tile con la id especificada. tile_get_depth(id) Devuelve la profundidad de la tile con la id especificada.

tile_get_visible(id) Devuelve si la tile con la id especificada es visible o no. tile_get_xscale(id) Devuelve el factor horizontal de escalado de la tile con la id especificada. tile_get_yscale(id) Devuelve el factor vertical de escalado de la tile con la id especificada. tile_get_background(id) Devuelve el fondo de la tile con la id especificada. tile_get_blend(id) Devuelve el color de teido de la tile con la id especificada. tile_get_alpha(id) Devuelve el factor de transparencia de la tile con la id especificada.

Las funciones siguientes sirven para manipular las propiedades de las tiles:

tile_set_position(id,x,y) Coloca la tile con la id especificada en la posicin x,y. tile_set_region(id,left,top,width,height) Cambia la regin del tile con la id especificada sobre su fondo. tile_set_background(id,background) Cambia el fondo de la tile con la id especificada. tile_set_visible(id,visible) Cambia la visibilidad de la tile con la id especificada. tile_set_depth(id,depth) Cambia la profundidad de la tile con la id especificada. tile_set_scale(id,xscale,yscale) Cambia los factores de escala de la tile con la id especificada. tile_set_blend(id,color) Cambia el color de teido de la tile con la id especificada. Slo disponible en la versin
registrada!

tile_set_alpha(id,alpha) Cambia la transparencia de la tile con la id especificada.


Las funciones siguientes manejan capas de tiles, es decir, grupos de tiles que tienen la misma profundidad:

tile_layer_hide(depth) Oculta todas las tiles con la profundidad indicada. tile_layer_show(depth) Muestra todas las tiles con la profundidad indicada. tile_layer_delete(depth) Elimina todas las tiles con la profundidad indicada.. tile_layer_shift(depth,x,y) Mueve todas las tiles con la profundidad indicada siguiendo el vector (x,y). Esta funcin se
puede usar para capas de tiles mviles.

tile_layer_find(depth,x,y) Devuelve la id de la tile con la profundidad indicada que se encuentra en la posicin (x,y). Si no
se encuentra ninguna tile la funcin devuelve -1. Cuando se encuentran varias tiles en esa posicin con la misma profundidad se devuelve la primera.

tile_layer_delete_at(depth,x,y) Elimina la tile con la profundidad indicada que se encuentra en la posicin (x,y). Si se
encentran varias tiles en esa posicin y con la profundidad indicada se eliminan todas.

tile_layer_depth(depth,newdepth) Cambia la profundidad de todas las tiles con la profundidad indicada a la nueva
profundidad. Es decir, con esta funcin puedes mover capas enteras de tiles a otra profundidad.

El display

El display es todo el rea del monitor. Tiene varias caractersticas como el tamao (tpicamente 1024x768 1280x1024), la profundidad de color (que es el nmero de bits que se utilizan para representar 1 pxel) y suele ser de 16 bits (color de alta densidad) 32 bits (color verdadero) y la frecuencia de refresco, que es el nmero de veces por segundo que se refresca el display, es decir, cuntas veces por segundo se vuelven a dibujar los pxeles en la pantalla (tpicamente entre 60 y 120). Estos parmetros se pueden cambiar desde las propiedades de la pantalla en Windows. Pero para algunos juegos, sobre todo los que se ejecuten en pantalla completa, es importante poder controlar estos aspectos. Todos ellos se pueden inicializar desde la pestaa Game Settings. Para cambiar estos parmetros durante el juego Game Maker dispone de un grupo de funciones que veremos a continuacin. Debes tener en cuenta que al cambiar estos parmetros el sistema necesitar un poco de tiempo para volver a ajustarlo todo. Las funciones para cambiar el modo slo estn disponibles en la versin registrada de Game Maker.

display_get_width() Devuelve la anchura del display en pxeles. display_get_height()Devuelve la altura del display en pxeles. display_get_colordepth()Devuelve la profundidad de color en bits. display_get_frequency()Devuelve la frecuencia de refresco del monitor. display_set_size(w,h) Cambia la altura y anchura del display a los nuevos valores indicados. La funcin devuelve true si los
cambios se aplicaron con xito y false en caso contrario (Debes tener en cuenta que slo algunas combinaciones estn permitidas, por ejemplo 800x600, 1024x768 1280x1024).

display_set_colordepth(coldepth) Cambia la profundidad de color a la especificada. En general slo se permite usar


profundidad de color de 16 32 bits. La funcin devuelve true si los cambios se aplicaron con xito y false en caso contrario.

display_set_frequency(frequency) Cambia la frecuencia de refresco del monitor a la especificada. Slo unas pocas
frecuencias estn permitidas. Por ejemplo, puedes ajustar este valor a 60 y usar un room_speed del mismo valor para lograr animaciones fluidas de 60 frames por segundo. La funcin devuelve true si los cambios se aplicaron con xito y false en caso contrario.

display_set_all(w,h,frequency,coldepth)

Cambia todos los valores a la vez. Para valores que no quieras cambiar

utiliza -1. La funcin devuelve true si los cambios se aplicaron con xito y false en caso contrario.

display_test_all(w,h,frequency,coldepth)

Comprueba si los valores especificados estn permitidos. La funcin no

aplica los valores al display, slo chequea si son vlidos. Para los valores que no quieras cambiar usa el valor -1. La funcin devuelve true si los cambios se pueden aplicar y false en caso contrario.

display_reset() Resetea las caractersticas del display a los originales, es decir, a los que estaban presentes cuando se inici el
programa.

A veces es til poder conocer la posicin del puntero en el display o poder cambiarla. Para ello se usan las funciones siguientes:

display_mouse_get_x() Devuelve la coordenada x del puntero en el display. display_mouse_get_y()Devuelve la coordenada x del puntero en el display. display_mouse_set(x,y) Cambia la posicin del puntero a los valores indicados.

La ventana

El juego se ejecuta en una ventana. Esta ventana tiene varias propiedades como si tiene borde, si ocupa toda la pantalla...Normalmente estos valores se fijan desde la opcin Game Settings. Pero tambin puedes cambiarlos durante el juego. Para ello puedes usar las funciones siguientes:

window_set_visible(visible) Hace que la ventana se vuelva visible o invisible. Normalmente la ventana es visible durante
todo el juego. Cuando la ventana sea invisible el programa no ejecutar ni recibir los eventos del teclado.

window_get_visible() Devuelve si la ventana es visible. window_set_fullscreen(full) Hace que la ventana ocupe toda la pantalla (modo pantalla completa) o no. window_get_fullscreen() Devuelve si la ventana ocupa toda la pantalla. window_set_showborder(show) Indica si el borde alrededor de la ventana debe mostrarse (si la ventana est a pantalla
completa el borde no se muestra).

window_get_showborder() Devuelve si el borde de la ventana es visible cuando sta no est a pantalla completa. window_set_showicons(show) Indica si deben mostrarse los iconos de la ventana (minimizar, maximizar y cerrar). Si la
ventana est a pantalla completa no se muestran.

window_get_showicons() Devuelve si los iconos de la ventana son visibles. window_set_stayontop(stay) Indica si la ventana de be mostrarse siempre por encima de otras ventanas que puedan existir. window_get_stayontop() Devuelve si la ventana se mantiene siempre por encima de las dems. window_set_sizeable(sizeable) Indica si el jugador puede cambiar el tamao de la ventana. El jugador slo podr hacer
esto si el borde de la ventana es visible y la ventana no est a pantalla completa.

window_get_sizeable() Devuelve si el jugador puede cambiar el tamao de la ventana. window_set_caption(caption) Indica el ttulo de la ventana. Normalmente esto se especifica al definir el room y se cambia
usando la variable room_caption. Por ello, esta funcin no es til a no ser que dibujes t mismo el room en lugar de dejar que Game Maker lo haga automticamente. El ttulo de la ventana slo es visible cuando sta tiene borde visible y no est a pantalla completa.

window_get_caption() Devuelve el ttulo de la ventana. window_set_cursor(curs) Indica el puntero que se usar en la ventana. Puedes indicar una de las siguientes constantes: cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_nodrop cr_hsplit cr_vsplit cr_multidrag cr_sqlwait

cr_no cr_appstart cr_help cr_handpoint cr_size_all


Por ejemplo, para hacer que no se vea el cursor o puntero usa window_set_cursor(cr_none).

window_get_cursor() Devuelve el cursor utilizado en la ventana. window_set_color(color) Indica el color de la parte de la ventana que no se usa para mostrar el room. window_get_color() Devuelve el color de la ventana. window_set_region_scale(scale,adaptwindow) Si la ventana es mayor que el cuarto actual el cuarto se muestra
centrado en la ventana. Con esta funcin es posible indicar si queremos que el cuarto sea escalado para que ocupe toda la ventana o una parte concreta. Si usamos el valor 1 el cuarto no ser escalado. Si usamos el valor 0 el cuarto se escalar para ocupar toda la ventana. Si usas un valor negativo el cuarto ser escalado al mximo valor dentro de la ventana que le permita seguir conservando su relacin de aspecto entre altura y anchura. El segundo parmetro, adaptwindow, indica si el tamao de la ventana debe adaptarse al cuarto si ste, una vez escalado, no entra por completo dentro de la misma. Esto slo suele ser til cuando el primer parmetro (el que indica el escalado del cuarto) es positivo.

window_get_region_scale() Devuelve el factor de escala de la regin de dibujo.


La ventana tiene una posicin en la pantalla y un tamao. Cuando hablamos de posicin y tamao siempre nos referimos a la ventana sin los bordes. Puedes cambiar estos valores aunque raramente querrs utilizarlo desde el juego. Normalmente, se determinan automticamente o el jugador escoge los que le interesan. Las funciones siguientes te permiten cambiar estos aspectos de las ventanas. Observa que estas funciones slo funcionarn si la ventana no est a pantalla completa. Si la ventana est a pantalla completa los cambios no se aplicarn hasta que la ventana vuelva al modo normal.

window_set_position(x,y) Indica la posicin de la ventana. window_set_size(w,h) Indica el nuevo tamao de la ventana. Observa que si el tamao indicado es menor que la regin de
dibujo se mantendr lo suficientemente grande como para que la regin entre por completo dentro de l.

window_set_rectangle(x,y,w,h) Indica la nueva posicin y medidas de la ventana (es como usar las dos funciones
anteriores a la vez).

window_center() Centra la ventana en la pantalla. window_default() Da a la ventana los valores por defecto de tamao y posicin (centrada). window_get_x() Devuelve la coordenada x de la ventana. window_get_y()Devuelve la coordenada y de la ventana. window_get_width()Devuelve la anchura de la ventana. window_get_height()Devuelve la altura de la ventana.
Puede que nunca necesites utilizar las funciones de posicionamiento de l ventana ya que Game Maker lo realizar automticamente.

En algunas ocasiones puede que quieras conocer la posicin del ratn respecto a la ventana (normalmente se usa la posicin del ratn respecto a un cuarto o a una vista). Las siguientes funciones sirven para esto:

window_mouse_get_x() Devuelve la coordenada x del puntero en la ventana. window_mouse_get_y()Devuelve la coordenada y del puntero en la ventana. window_mouse_set(x,y) Indica la nueva posicin del puntero en la ventana.

Vistas
Como ya deberas saber puedes definir hasta 8 vistas diferentes al disear un cuarto. Una vista se define por su rea en el cuarto y por su puerto o viewport en la pantalla (la regin de dibujo dentro de la ventana). Usando vistas puedes mostrar diferentes partes del cuarto en diferentes lugares de la pantalla. Adems, puedes asegurar que un objeto concreto siempre permanezca visible en una vista.

Puedes controlar las vistas con cdigo. Puedes hacerlas visibles o invisibles, cambiar su posicin o tamao dentro de la regin de dibujo o en el cuarto (lo cual es muy til cuando no indicas ningn objeto que deba ser seguido por la vista). Puedes cambiar el tamao de los bordes horizontal y vertical alrededor del objeto a ser seguido. Si el objeto que quieres que sea seguido cambia a otro tipo de objeto durante el juego (por ejemplo, si acumula mucha experiencia y evoluciona en un personaje ms poderoso) puede que las vistas siguientes no lo sigan correctamente. Para solucionar esto, puedes indicar este cdigo en el evento de creacin de todos los objetos del personaje (en este ejemplo se supone que la vista principal es la vista 0):

{ view_object[0] = object_index; }
Las siguientes variables actan sobre las propiedades de las vistas. Todas, excepto las dos primeras, son vectores con 8 elementos: el primer elemento (0) indica la primera vista y el ltimo elemento (7) la ltima.

view_enabled Indica si las vistas estn activadas en el cuarto actual. view_current* La vista que actualmente se est dibujando (0...7). Usa esta variable slo en el evento draw. Por ejemplo, puedes
chequear el valor de esta variable para dibujar algo slo en unas vistas y no en otras. El valor de esta variable no se puede cambiar.

view_visible[0..7] Devuelve si la vista indicada es visible en la pantalla view_xview[0..7] Posicin X de la vista en el cuarto. view_yview[0..7] Posicin Y de la vista en el cuarto. view_wview[0..7] Anchura de la vista en el cuarto. view_hview[0..7] Altura de la vista en el cuarto. view_xport[0..7] Posicin X del puerto en la regin de dibujo. view_yport[0..7] Posicin Y del puerto en la regin de dibujo. view_wport[0..7] Anchura del puerto en la regin de dibujo.

view_hport[0..7] Altura del puerto en la regin de dibujo. view_angle[0..7] ngulo de rotacin usado para la vista en el cuarto (grados en sentido antihorario). view_hborder[0..7] Tamao en pxeles del borde horizontal alrededor del objeto a seguir por la vista. view_vborder[0..7] Tamao en pxeles del borde vertical alrededor del objeto a seguir por la vista. view_hspeed[0..7] Velocidad horizontal mxima de la vista. view_vspeed[0..7] Velocidad vertical mxima de la vista. view_object[0..7] Objeto cuya instancia debe permanecer visible en la vista. Si hay varias instancias de este objeto se usar la
primera. Puedes asignar una id de una instancia a esta variable para indicar una instancia concreta que quieras seguir.

Observa que el tamao de la imagen en la pantalla se calcula a partir de las vistas visible al comienzo del cuarto. Si cambias las vistas durante el juego puede que ya no entren correctamente en la pantalla. Para solucionar esto, puedes adaptar t mismo el tamao de la pantalla con las siguientes funciones:

window_set_region_size(w,h,adaptwindow) Indica la anchura y altura de la regin de dibujo en la


ventana. adaptwindow indica si el tamao de la ventana debe adaptarse si la regin de dibujo no cabe dentro de ella. La ventanasiempre se adaptar si usas escalado fijo (Consulta la funcin window_set_region_scale() en el captulo La ventana).

window_get_region_width() Devuelve la anchura actual de la regin de dibujo. window_get_region_height()Devuelve la altura actual de la regin de dibujo.
A veces necesitars conocer la posicin del ratn. Normalmente puedes hacer esto con las variables mouse_x y mouse_y. Cuando hay muchas vistas, estas variables dan la posicin del ratn respecto a la vista en la que el ratn se encuentra. Pero puede ser que en alguna ocasin necesites conocer la posicin del ratn respecto a una vista concreta, incluso cuando el ratn se encuentre fuera de esa vista. Para hacer esto, puedes usar las siguientes funciones:

window_view_mouse_get_x(id) Devuelve la coordenada x del ratn respecto a la vista indicada. window_view_mouse_get_y(id) Devuelve la coordenada y del ratn respecto a la vista indicada. window_view_mouse_set(id,x,y) Indica la posicin del ratn respecto a la vista indicada. window_views_mouse_get_x()Devuelve la coordenada x del ratn respecto a la vista en la que se encuentra (es lo mismo
que mouse_x).

window_views_mouse_get_y()Devuelve la coordenada y del ratn respecto a la vista en la que se encuentra (es lo mismo
que mouse_y).

window_views_mouse_set(x,y) Indica la posicin del ratn respecto a la primera vista que es visible.

Transiciones
Al moverse de una room a otra puedes seleccionar una transicin. Tambin puedes seleccionar la transicin que se utilizar en el frame siguiente sin tener que cambiar de cuarto. Para esto usamos la variable transition_kind. Asignndole un valor entre 1 y 13 se usar la

transicin correspondiente. Si usamos un valor igual a 0 significa que no se aplicar ninguna transicin. La transicin slo se aplicar la prxima vez que se dibuje un frame.

transition_kind Indica la transicin al prximo frame:


0 = sin transicin 1 = Crear desde la izquierda 2 = Crear desde la derecha 3 = Crear desde arriba 4 = Crear desde abajo 5 = Crear desde el centro 6 = Cambiar desde la izquierda 7 = Cambiar desde la derecha 8 = Cambiar desde arriba 9 = Cambiar desde abajo 10 = Mezclar desde la izquierda 11 = Mezclar desde la derecha 12 = Mezclar desde arriba 13 = Mezclar desde abajo

Observa que es muy sencillo crear tus propias transiciones. Por ejemplo, para crear un efecto de oscurecimiento puedes dibujar un rectngulo negro que tape toda la pantalla y hacer que su factor de transparencia vaya aumentando poco a poco. O puedes cambiar la posicin y el tamao de una vista para mover el cuarto fuera de la zona visible. Utilizando superficies y partculas puedes crear transiciones realmente asombrosas!

Redibujando la pantalla
Normalmente al final de cada paso del juego (step) el cuarto se dibuja en la pantalla. Pero en algunas ocasiones puede que quieras dibujar el cuarto en otro momento. Esto ocurre cuando tu programa toma el control, por ejemplo: antes de que el programa se congele durante un largo perodo es recomendable dibujar el cuarto. O cuando el juego muestra un mensaje y espera a que el jugador presione un tecla para continuar es necesario dibujar el cuarto en medio de esta operacin. Existen dos funciones para hacer esto:

screen_redraw() Redibuja la pantalla ejecutando todos los eventos de dibujo. screen_refresh() Refresca la pantalla usando la imagen del cuarto actual sin ejecutar los eventos de dibujo.
Para entender la segunda funcin es necesario ver cmo trabaja internamente el mecanismo de dibujo. Internamente existe una imagen donde se dibuja todo. Esta imagen no es visible en la pantalla. Slo al final de un paso del juego, cuando se ha dibujado todo, la imagen de la pantalla se reemplaza por esta imagen interna (esta tcnica se conoce como double buffering). La primera funcin scrren_redraw() dibuja la imagen interna y luego refresca la imagen de la pantalla. La segunda funcinscreen_refresh() slo refresca la imagen de la pantalla, pero no actualiza la imagen interna.

Ahora deberas entender por qu no puedes usar las acciones o funciones de dibujo en otros eventos a parte de los eventos de dibujo. Si lo haces as, dibujaras elementos en la imagen interna pero no en la pantalla. Cuando se ejecuta el evento draw, primero se dibuja el fondo del cuarto, tapando y borrando todo lo que habas dibujado en la imagen interna. Pero cuando usas screen_refresh() despus de dibujar algo, la imagen se volver visible en la pantalla. Por ejemplo, podemos crear un trozo de cdigo que dibuje un texto en la pantalla, llame a la funcin de refresco y espere a que el jugador pulse una tecla:

{ draw_text(screen_width/2,100,'Pulsa cualquier tecla para continuar'); screen_refresh(); keyboard_wait(); }


Observa que al dibujar en un evento distinto del evento draw slo puedes dibujar en la imagen interna, nunca en una vista! As que las coordenadas que usas sern las mismas que si no hubiera vistas. Ten cuidado al usar esta tcnica: asegrate de que has entendido bien como funciona y ten en cuenta que el refresco de la pantalla tarda un poco de tiempo.

Cuando ests dibujando el propio cuarto puede ser til no dejar que se dibuje automticamente. Por ejemplo, puedes querer que el cuarto slo se dibuje cada 5 pasos. Para ello puedes usar la funcin siguiente:

set_automatic_draw(value) Indica si el cuarto se debe dibujar automticamente (true por defecto) o no (false).
Finalmente, hay una funcin que te permite sincronizar el dibujo con la frecuencia de refresco del monitor:

set_synchronization(value) Indica si se debe sincronizar el dibujo con la frecuencia de refresco del monitor.
Tambin puedes obligar a que el programa espere hasta la prxima sincronizacin vertical:

screen_wait_vsync() Espera hasta la siguiente sincronizacin vertical del monitor.

Msica y sonido
Actualmente, el sonido juega un papel crucial en los videojuegos de computadora. Estos deben ser agregados al juego en forma de recursos de sonido, pero asegrate de que los nombres que uses sean nombres de variable vlidos. Como ya habrs ledo, puedes indicar cuatro diferentes tipos de sonido: normal, msica de fondo, 3D, y sonidos que deben ser reproducidos a travs de un reproductor multimedia.

Los sonidos normales son usados para efectos de sonido y por lo general, son archivos WAV. Puedes reproducir muchos del tipo NORMAL a la vez (incluso puedes reproducir mltiples instancias del mismo sonido a la vez) y se caracterizan por podrseles aplicar cualquier tipo de efectos en ellas.

El sonido de fondo comnmente consiste en archivos MIDI pero algunas veces tambin pueden usarse WAV y a estos tambin se les puede aplicar efectos de sonido. La nica diferencia que tienen con los sonidos NORMALES, es que los de fondo solo pueden reproducirse uno a la vez. Si reproduces un sonido, el que previamente se haba estado reproduciendo es parado.

El uso y caractersticas del sonido 3D son descritos ms adelante, en el subcaptulo Sonidos 3D. Son sonidos mono (WAV o MIDI). Finalmente, si quieres usar otro tipo de sonido, en partculas mp3, estos no pueden ser reproducidos por DirectX. En su lugar, el reproductor multimedia normal debe ser usado para esto, lo cual lo hace mucho ms limitado, ya que solo puedes reproducir un sonido a la vez, no se le pueden aplicar efectos (ni siquiera cambio de volumen) y el tiempo (p.e. los sonidos rebobinados son de calidad pobre). Tambin puede haber retardos en reproducirlos. Se recomienda altamente no usar este tipo de media, ya que hay algunas computadoras que probablemente no estn capacitadas para reproducirlos).

Puedes encontrar informacin sobre las funciones de audio en las secciones siguientes: Funciones bsicas de sonido Efectos de sonido Sonido 3D Msica desde el CD

Funciones bsicas de sonido


Existen cinco funciones bsicas relacionadas con sonido: 2 para reproducir un sonido, una para ver si un sonido se est reproduciendo, y dos ms para parar el sonido. La mayora necesita el ndice del sonido como argumento. El nombre del sonido representa su ndice, pero tambin puedes almacenar el ndice en una variable, y usarla como argumento.

sound_play(index) Reproduce el sonido indicado una vez. Si el sonido es msica de fondo, la actual es parada. sound_loop(index) Reproduce el sonido indicado, rebobinndolo continuamente. Si el sonido es msica de fondo, la actual es
parada.

sound_stop(index) Para el sonido indicado. Si hay varios sonidos con este ndice reproducindose simultneamente, todos son
parados.

sound_stop_all() Para todos los sonidos. sound_isplaying(index) Devuelve si (una copia de) el sonido indicado se esta reproduciendo. Ntese que esta funcin devuelve
true cuando el sonido realmente esta reproducindose a travs de los altavoces (lnea de salida). Despus de llamar la funcin de reproducir un sonido, no llega a los altavoces inmediatamente, lo que quiere decir que mientras esto no suceda, esta funcin devolver false. Parecido es si cuando el sonido es parado y lo escuchas por un tiempo ms (p.e. por el eco), la funcin devolver true.

Es posible usar efectos de sonido. en lo particular puedes cambiar el volumen y pan (si el sonido viene del altavoz izquierdo o derecho). En estos casos el volumen solamente puede ser reducido. Estas funciones no trabajan con archivos que se reproducen a travs del reproductor multimedia.

sound_volume(index,value) Cambia el volumen del sonido indicado (0 = bajo, 1 = alto,) sound_global_volume(value) Cambia el volumen global de todos los sonidos (0=bajo, 1=alto) sound_fade(index,value,time) Cambia el volumen del sonido indicado a el nuevo value (0=bajo, 1=alto) durante el tiempo
indicado (en milisegundos). Esto puede ser usado para ascender o descender el sonido (p.e. para entradas).

sound_pan(index,value) Cambia el pan del sonido indicado (-1=izquierda, 0,centro, 1=derecha). sound_background_tempo(factor) Cambia el tempo de la msica de fondo (si es un archivo midi). factor indica el factor a
multiplicar por el tempo. Un valor de 1 corresponde al tempo normal. Valores mayores corresponden a un tempo ms rpido, menores a un tempo ms lento. Debe oscilar entre 0.01 y 100.

A dems de los archivos MIDI y WAV (y mp3) existe un cuarto tipo de archivo que puede ser reproducido: archivos direct music. Tienen la extensin .sgt. Dichos archivos frecuentemente se refieren a otros archivos describiendo p.e. banda o gnero. Para encontrar estos archivos, el sistema de sonido debe saber donde se localizan. Con este propsito, puedes usar las siguientes funciones para estableces el directorio de bsqueda de archivos. NOTA: Debes agregar los archivos tu mismo. Game Maker no incluye automticamente dichos archivos adicionales.

sound_set_search_directory(dir) Establece el directorio en donde se deben buscar archivos direct music. El string DIR
no debe incluir la diagonal al final.

Efectos de sonido
Esta funcionalidad esta disponible nicamente en la versin registrada de Game Maker.

Los efectos de sonido pueden ser usados para cambiar la manera en que los sonidos normales y msica de fondo, suena. Ten en cuenta que los efectos de sonidos solo aplican en archivos WAV y MIDI, no a los mp3. Esta seccin describe las funciones que existen para usar y

cambiar efectos de sonido. Ten tambin en cuenta que para poder usar estas funciones necesitas una buena comprensin de cmo el sonido y los sintetizadores trabajan. No se han agregado explicaciones de los diferentes parmetros que se dan. Busca en la web o en libros para ms informacin.

Para aplicar un efecto de sonido a un sonido en particular, puedes indicarlo cuando definas el sonido como recurso o puedes usar la siguiente funcin:

sound_effect_set(snd,effect) Establece una (combinacin de) efecto(s) de sonido para el sonido indicado.
EFFECT puede ser cualquiera de estos valores:

se_none se_chorus se_echo se_flanger se_gargle se_reverb se_compressor se_equalizer


Puedes establecer una combinacin de efectos, sumando los valores. Entonces, por ejemplo, puedes usar:

sound_effect_set(snd,se_echo+se_reverb);
para obtener una combinacin de los efectos echo y reverb.

Todos los efectos tienen distintas configuraciones, una vez que el efecto ha sido aplicado en un sonido. El orden en esto es crucial. Primero aplicas el efecto al sonido y despus estableces sus parmetros. Una vez que reapliques los efectos al sonido, la configuracin se borra y necesitas establecerla de nuevo. Ntese que todos los parmetros deben oscilar en un rango en particular, segn se indique a continuacin. Las siguientes funciones existen para cambiar la configuracin de los efectos de sonido: *Al final de cada parmetro, entre parntesis est el rango que se necesita usar p.e. (0 a 100,pred.50) pred.=predeterminado

sound_effect_chorus(snd,wetdry,depth,feedback,frequency,wave,delay,phase) Establece los


parmetros para el efecto de chorus al sonido indicado. Los siguientes parmetros son requeridos: WETDRY Radio de la seal wet (procesada) a la seal dry (no procesada).(0 a 100,pred.50) DEPTH Porcentaje con el cual el tiempo de espera es modulado por el oscilador de baja frecuencia, en cientos por punto de porcentaje. (0 a 100,pred.25) FEEDBACK Porcentaje de seal de salida para respaldar la entrada del sonido. (-99 a 100,pred.0) FREQUENCY Frecuencia del LFO (0 a 10,pred.0) WAVE Forma de la onda del LFO (0- triangular, 1-onda,pred.1) DELAY Tiempo (nmero) en milisegundos que la entrada debe esperar antes de ser reproducida de nuevo (0 a 20,pred.0) PHASE Fase diferencial entre LFOs izquierdos o derechos.(0 a 4,pred.2)

sound_effect_echo(snd,wetdry,feedback,leftdelay,rightdelay,pandelay) Establece los


parmetros para el efecto de echo al sonido indicado. Los siguientes parmetros son requeridos: WETDRY Radio de la seal wet (procesada) a la seal dry (no procesada).(0 a 100,pred.50) FEEDBACK .Porcentaje de seal de salida para respaldar la entrada del sonido. (-99 a 100,pred.0) LEFTDELAY. Retraso para el canal izquierdo, en milisegundos. (1 a 2000,pred.333) RIGHTDELAY. Retraso para el canal derecho, en milisegundos. (1 a 2000,pred.333) PANDELAY. Indica si el LEFTDELAY y RIGHTDELAY deben intercambiarse con cada echo que sucede.(0 y 1,pred.0)

sound_effect_flanger(snd,wetdry,depth,feedback,frequency,wave,delay,phase) Establece los


parmetros para el efecto de flanger al sonido indicado. Los siguientes parmetros son requeridos: WETDRY Radio de la seal wet (procesada) a la seal dry (no procesada).(0 a 100,pred.50) DEPTH Porcentaje con el cual el tiempo de espera es modulado por el oscilador de baja frecuencia, en cientos por punto de porcentaje. (0 a 100,pred.25) FEEDBACK Porcentaje de seal de salida para respaldar la entrada del sonido. (-99 a 100,pred.0) FREQUENCY Frecuencia del LFO (0 a 10,pred.0) WAVE Forma de la onda del LFO (0- triangular, 1-onda,pred.1) DELAY Tiempo (nmero) en milisegundos que la entrada debe esperar antes de ser reproducida de nuevo (0 a 20,pred.0) PHASE Fase diferencial entre LFOs izquierdos o derechos.(0 a 4,pred.2)

sound_effect_gargle(snd,rate,wave) Establece los parmetros para el efecto de gargle al sonido indicado. Los
siguientes parmetros son requeridos:

RATE Variable de modulacin,en Hertz. (1 a 1000, pred.1)


WAVE Forma de la onda del LFO (0- triangular, 1-onda,pred.1)

sound_effect_reverb(snd,gain,mix,time,ratio) Establece los parmetros para el efecto de reverb al sonido


indicado. Los siguientes parmetros son requeridos:

GAIN Seal ganada por la entrada, en decibels (dB) (-96 a 0,pred.0) MIX Mezcla de la repeticin, en dB. (-96 a 0,pred.0) TIME Tiempo de la repeticin, en milisegundos (0.001 a 3000,pred.1000) RATIO
Radio de frecuencia (0.001 a 0.999,pred.0.001)

sound_effect_compressor(snd,gain,attack,release,threshold,ratio,delay) Establece los


parmetros para el efecto de compressor al sonido indicado. Los siguientes parmetros son requeridos:

GAIN Seal de salida ganada despus de la compresin (-60 a 60, pred.0)


ATTACK Tiempo antes de que la compresin termine (0.01 a 500,0.01) RELEASE Velocidad a la que la entrada es parada despus de que la entrada llegue debajo del umbral.(50 a 3000,pred.50)

RATIO

Radio de frecuencia (0.001 a 0.999,pred.0.001)

DELAY Tiempo (nmero) en milisegundos que la entrada debe esperar antes de ser reproducida de nuevo (0 a 20,pred.0)

sound_effect_equalizer(snd,center,bandwidth,gain) Establece los parmetros para el efecto de equalizer al


sonido indicado. Los siguientes parmetros son requeridos:

center Fecuencia central, en Hertz (80 a 16000) bandwidth Banda ancha, en semitonos (1 a 36) gain Ganancia. (-15 a 15)

Sonido 3D
Esta funcionalidad esta disponible nicamente en la versin registrada de Game Maker.

Sonido 3D se refiera al sonido que tiene una posicin (y velocidad) con respecto al oyente. A pesar de que es ms prominente usarlo en juegos 3D, tambin puede ser efectivamente aplicado en juegos 2D. La idea es que el sonido tenga una posicin en el espacio. En todas las funciones, se asume que el oyente est en una posicin (0,0,0). El sistema calcula como el receptor estara oyendo el sonido, y lo adapta acorde a esto. Este efecto es especialmente bueno cuando tienes un buen equipo de sonido. De cualquier manera, esto tambin funciona en altavoces pequeos.

Adems de una posicin, el sonido tambin puede tener una velocidad. Esto lleva al muy conocido efecto Doppler, que estn correctamente modelado. Finalmente el sonido puede tener una orientacin y, una vez ms, el sonido es adaptado por consiguiente. Game Maker cuenta con la modalidad de sonido 3D, a travs de las funciones que se indican abajo, pero solo funcionan con recursos de sonido que fueron indicados como 3D. (La desventaja es que los sonidos 3D son mono, no estreo).

sound_3d_set_sound_position(snd,x,y,z)

Establece la posicin al sonido indicado con respecto a la posicin del

oyente en el espacio. Valores en el eje x incrementan de izquierda a derecha, en el eje y de arriba hacia abajo, y en el eje z de cerca a lejos. Estos valores son medidos en metros. El volumen con el que el sonido se debe or depende en esta medida, de la misma manera a como ocurre en el mundo real.

sound_3d_set_sound_velocity(snd,x,y,z)

Establece la velocidad al sonido indicado con el vector indicado en el

espacio. Por favor note que estableciendo la velocidad no significa que la posicin cambie. La velocidad es usada slo para calcular efectos doppler. Entonces, si quieres mover un sonido debes cambiar tu mismo la posicin del sonido.

sound_3d_set_sound_distance(snd,mindist,maxdist)

Establece la distancia mnima a la cual el sonido est en

su mxima amplitud, y la distancia mxima a la cual el sonido ya no se debe oir. Entonces, cuando la distancia oscila entre 0 y la mxima distancia, el sonido esta en su mxima amplitud. Cuando se oscile entre la distancia mnima y la mxima, la amplitud decrece lentamente hasta que la distancia mxima es alcanzada, o el sonido ya no es audible. Por predeterminado (default), la distancia mnima es 1 metro y la mxima 1 billn de metros.

sound_3d_set_sound_cone(snd,x,y,z,anglein,angleout,voloutside

Normalmente el sonido tiene la misma amplitud, a una distancia dada, en todas las direcciones. Puedes establecer un cono de sonido para cambiar esto y dirigir el sonido. x,y,z especifican la direccin del cono. ANGLEIN especifica el ngulo interior. Si el oyente esta dentro de este ngulo, puede escuchar el sonido en su volumen normal. ANGLEOUT especifica el ngulo exterior. Cuando el oyente esta afuera de este ngulo, el volumen es indicado con VOLOUTSIDE. Para ser precisos, VOLOUTSIDE es un nmero negativo que indica el nmero de cientos de decibeles que deben ser sustrados del volumen interior. Entre el ngulo interior y exterior, el volumen decrece gradualmente.

Msica desde el CD
Esta funcionalidad esta disponible nicamente en la versin registrada de Game Maker.

Existen tambin funciones para tratar con la reproduccin de msica desde un CD:

cd_init()Debe llamarse antes de usar las otras funciones, as como cuando se cambia un CD (o simplemente de tiempo a tiempo). cd_present()Devuelve si hay un cd en el dispositivo CD predeterminado. cd_number()Devuelve el numero de pistas en el CD. cd_playing()Devuelve si el CD se est reproduciendo. cd_paused().Devuelve si el CD esta pausado o parado. cd_track()Devuelve el nmero de la pista que se est reproduciendo (1=la primera) cd_length().Devuelve la longitud total del CD en milisegundos. cd_track_length(n). Devuelve la longitud de una pista n del CD en milisegundos cd_position().Devuelve la posicin actual en el CD en milisegundos. cd_track_position().Devuelve la posicin actual de la pista reproducida, en milisegundos. cd_play(first,last). Le indica al CD desde que pista a que pista debe reproducir. Si deseas que reproduzca todo el CD, indica 1
y 1000 como argumentos.

cd_stop()Deja de reproducir. cd_pause().Pausa la reproduccin. cd_resume().Continua la reproduccin. cd_set_position(pos). Establece la posicin en el CD, en milisegundos. cd_set_track_position(pos). Establece la posicin de la pista actual en milisegundos. cd_open_door()Abre la caja del Reproductor de CDs. cd_close_door()Cierra la caja del Reproductor de CDs.
Hay una funcin general para acceder la funcionalidad multimedia de Windows:

MCI_command(str) Esta funcin enva el comando al sistema multimedia de Windows usando el Media Control Interface (MCI,
Interfaz de Control de Medios). Devuelve la cadena de texto de resultado. Puedes usar esta funcin para controlar cualquier tipo de

hardware multimedia. Para ms informacin sobre este comando, consulta la ayuda de Windows. Por ejemplo,

MCI_command('play

cdaudio from 1') pone a sonar el cd (despus de inicializalo correctamente). Esta funcin es slo para uso avanzado.

Ventanas, highscores, y otros pop-ups

En esta seccin vamos a aprender algunas funciones que pueden ser usadas para mostrar ventanas con videos, imgenes, etc...para mostrar mensajes y preguntas al jugador, y mostrar la tabla de mayores puntajes. Esta seccin est dividida en los temas: Ventanas Preguntas y mensajes pop-up Tablas de rcords

Ventanas
Muchos juegos tienen ventanas, las cuales pueden mostrar un video, una imagen o algn texto. Frecuentemente son usadas al principio del juego (como intro), al principio de un nivel, o al final del juego (p.e. los crditos). En Game Maker, dichas ventanas con texto, imgenes o video pueden mostrarse en cualquier momento del juego, y mientras esto sucede, el juego es temporalmente pausado. Estas son las funciones:

show_text(fname,full,backcol,delay) Muestra una ventana con texto. fname es el nombre del archive de texto (.txt
o .rtf). Debes poner este archivo en el directorio del juego tu mismo. Tambin, cuando crees una versin independiente del juego (standalone), no debes olvidar incluir este archive ah. full indica si se debe mostrar en pantalla completa. BACKCOL es el color de fondo, y DELAY es el retardo en segundos antes de volver al juego (aunque el jugador siempre tendr la posibilidad de volver al juego manualmente, haciendo clic con el Mouse)

show_image(fname,full,delay) Muestra una ventana con una imagen. fname es el nombre del archivo de imagen
(nicamente .bmp, .jpg y .wmf), pero debes poner los archivos en el directorio del juego tu mismo. FULL indica si deseas mostrarlo en pantalla completa. DELAY es el retardo en segundos antes de volver al juego.

show_video(fname,full,loop) Muestra una ventana de video. FNAME es el nombre del archivo de video (.avi,.mpg), pero
debes poner este archivo en el directorio del juego tu mismo. FULL indica si deseas mostrarlo en pantalla completa. DELAY es el retardo en segundos antes de volver al juego.

show_info() Muestra la informacin del juego. load_info(fname) Carga la informacin del juego con el nombre de archive FNAME, el cual debera ser un archivo RTF. Esto hace
posible mostrar diferentes archivos de ayuda, en diferentes momentos.

Preguntas y mensajes pop-up


Existen otras funciones para mostrar mensajes, preguntas, un men con opciones, o un cuadro de dilogo en el cual el jugador puede insertar un nmero, un string, indicar un color o un nombre de archivo:

show_message(str) Muestra un cuadro de dialogo con un string STR como mensaje. show_message_ext(str,but1,but2,but3) Muestra un cuadro de dilogo con el string STR como mensaje, ms un
mximo de 3 botones. But1,but2 y but3 contienen el texto de cada botn. Un string vaco significa que el botn no se mostrar. En los textos puedes usar el smbolo & para indicar que el siguiente carcter debe ser usado como acceso directo a ese botn (p.e. &Acepto, si se presiona A se simula la presin del botn). Esta funcin devuelve el nmero del botn presionado (0 si el usuario presiona la tecla ESC).

show_question(str) Muestra una pregunta; devuelve true cuando el usuario elige yes y de otra manera, false. get_integer(str,def) Pregunta un nmero al jugador por medio de un cuadro de dilogo. STR es el mensaje, DEF es el nmero
predeterminado que se mostrar.

get_string(str,def) Pregunta un string al jugador en un cuadro de dilogo. STR es el mensaje, DEF es el valor predeterminado. message_background(back) Establece la imagen de fondo par a los cuadros de dilogo para cualquiera de las funciones arriba.
BACK debe ser uno de los archivos definidos en el juego. Si BACK es parcialmente transparente, tambin lo ser el cuadro de dilogo (solo para Windows 2000 o superior).

message_alpha(alpha) Establece la traslucidez de los cuadros de dilogo para cualquiera de las funciones anteriores. ALPHA debe
oscilar entre 0 (completamente traslcido) y 1 (completamente opaco) (solo para WIN2000 o superior).

message_button(spr) Establece el sprite usado para los botones en los cuadros de dilogo. SPR debe ser un sprite consistiendo
de 3 imgenes, la primera indica el botn cuando no esta presionado y el mouse est alejado, el Segundo indica el botn cuando el mouse est sobre el pero no presionado, y el tercero cuando del botn es presionado.

message_text_font(name,size,color,style) Establece la fuente para el texto de los cuadros de dilogo (esta debe
ser una fuente normal de Windows, no una de las fuentes de recurso que usas en tu juego!) STYLE indica el estilo de la fuente (0=normal, 1=negrita, 2=cursiva, 3=negrita y cursiva).

message_button_font(name,size,color,style) Establece la fuente para los botones en los cuadros de dilogo.


STYLE indica el estilo de fuente. (0=normal, 1=negrita, 2=cursiva, 3=negrita y cursiva).

message_input_font(name,size,color,style) Establece la fuente

para el campo de entrada en los cuadros de

dilogo. STYLE indica el estilo de fuente. (0=normal, 1=negrita, 2=cursiva, 3=negrita y cursiva).

message_mouse_color(col) Establece el color de la fuente para los botones en los cuadros de dilogo cuando el mouse est
sobre ellos.

message_input_color(col) Establece el color para el fondo del campo de entrada en los cuadros de dilogo. message_caption(show,str) Establece el ttulo del cuadro de dilogo. SHOW indica si
y STR indica el ttulo cuando el borde si es mostrado. se debera mostrar el borde (1) o no (0)

message_position(x,y) Establece la posicin para los cuadros de dilogo en la pantalla. message_size(w,h) Arregla el tamao de los cuadros de dilogo en la pantalla. Si eliges 0 para el ancho(w), el ancho de la imagen
es usado. Si eliges 0 para el alto (h), el alto se calcula basndose en el nmero de lneas del mensaje.

show_menu(str,def) Muestra un men pop-up. STR indica el texto del men. Este consiste en diferentes opciones del men con
una barra vertical entre ellas. Por ejemplo, str = menu0|menu1|menu2. Cuando la primera opcin es seleccionada, se devuelve un 0, para la segunda un 1, etc. Cuando ninguna opcin es seleccionada, el valor predeterminado def es devuelto.

show_menu_pos(x,y,str,def) Muestra un men popup, como en la funcin anterior, pero en la posicin x, y en la pantalla.

get_color(defcol) Le pide al jugador un color. DEFCOL es el color predeterminado. Si el jugador presiona CANCEL el valor -1 es
devuelto.

get_open_filename(filter,fname) Le pide al jugador un archive para abrir, con el filtro (FILTER) dado. El filtro tiene la
forma nombre1|mscara1|nombre2|mscara2 . Una mscara contiene diferentes opciones con un ';'(punto y coma) entre ellas. '*' (asterisco) significa cualquier string. Por ejemplo: Mapa de bits|*bmp;*.wmf.Si el jugador presiona Cancel, un string vaco es devuelto.

get_save_filename(filter,fname) Pide un archivo para guardarlo, con el filtro dado. Si el jugador presiona Cancel, un
string vaco es devuelto.

get_directory(dname) Pide un directorio. DNAME es el nombre predeterminado. Si el usuario presiona Cancel, un string vaco es
devuelto.

get_directory_alt(capt,root) Una forma alternativa de preguntar por un directorio. CAPT es el titulo a mostrar. ROOT es
la raz del diagrama del directorio a mostrar. Usa un string vaco para mostrar el diagrama completo. Si el usuario presiona Cancel, un string vaco es devuelto.

show_error(str,abort) Muestra un mensaje de error estndar (y/o escribe el error al archivo de registros). ABORT indica si el
juego debera cerrarse (true-abortar, false-ignorar).

Tablas de rcords
Una ventana pop-up especial es la lista de MEJORES PUNTAJES que se mantiene para cada juego. Las siguientes funciones existen para esto:

highscore_show(numb) Muestra la tabla de highscores. NUMB es un nuevo puntaje. Si el puntaje es suficientemente bueno para
ser agregado a la lista, el jugador puede introducir un nombre. Usa -1 para nicamente mostrar la lista actual.

highscore_set_background(back) Establece la imagen de fondo. BACK debe ser el ndice de uno de los recursos de fondo. highscore_set_border(show) Establece si la forma de highscore debe mostrar un borde o no. highscore_set_font(name,size,style) Establece la fuente usada para el texto en la tabla. (Esta es una fuente normal
de Windows, no una de los recursos de fuente). Debes especificar un nombre y un estilo (0=normal, 1=negrita, 2=cursiva, 3=negrita y cursiva).

highscore_set_colors(back,new,other)Establece los colores usados para el fondo, el de una nueva entrada en la tabla,
y el de las dems entradas. entradas.

highscore_set_strings(caption,nobody,escape) Cambia los diferentes strings predeterminados usados al mostrar


la tabla de highscores. CAPTION es el ttulo de la forma. NOBODY es el string usado cuando no hay nadie en un lugar en particular. ESCAPE es el string en el inferior indicando que se debe presionar la tecla ESC. Puedes usar esto en particular cuando tu juego usa un idioma diferente.

highscore_show_ext(numb,back,border,col1,col2,name,size) Muestra la tabla de hightscores con


diferentes opciones (tambin puede lograrse usando las funciones anteriores). NUMB es el nuevo puntaje. Si el puntaje es suficientemente bueno para ser agregado a la lista, el jugador puede introducir un nombre. Usa -1 para mostrar simplemente la lista actual. BACK es la imagen de fondo a usar, BORDER indica si se debe mostrar o no el borde. COL1 es el color para la nueva entrada, COL2 para las dems entradas. NAME es el nombre de la fuente a usar, y SIZE es el tamao de la fuente.

highscore_clear() Limpia la tabla de puntajes. highscore_add(str,numb) Agrega al jugador con el nombre STR y puntaje NUMB a la lista. highscore_add_current() Agrega el puntaje actual a la lista de hightsocres. Tambin se le pide al jugador que proporcione un
nombre.

highscore_value(place) Devuelve el puntaje de la persona en el lugar PLACE(1-10). Esto puede ser usado para dibujar tu
propia lista de puntajes.

highscore_name(place) Devuelve el nombre de la persona con el lugar PLACE(1-10). draw_highscore(x1,y1,x2,y2) Dibuja la tabla de puntajes en la room, con la caja dada (x1,y1,x2,y2), usando la fuente
actual.

Recursos

En Game Maker puedes especificar varios tipos de recursos, como sprites, sonidos, fondos, objetos, etc. En este captulo encontrars un nmero de opciones que actan sobre estos recursos, para modificarlos u obtener informacin de ellos en tiempo real. Los recursos se dividen en los siguientes tipos: Sprites Sonidos Fondos Fuentes Paths Scripts Time lines Objetos Rooms

Sprites
Las funciones siguientes te dan informacin sobre un sprite:

sprite_exists(ind) Devuelve si el sprite con el ndice (ind) especificado existe. sprite_get_name(ind) Devuelve el nombre del sprite con el ind especificado. sprite_get_number(ind) Devuelve el nmero de subimgenes del sprite con el ndice dado. sprite_get_width(ind) Devuelve el ancho del sprite con el ndice especificado. sprite_get_height(ind) Devuelve la altura del sprite con el ndice dado. sprite_get_transparent(ind) Devuelve si el sprite con el ndice especificado utiliza transparencia. sprite_get_smooth(ind) Devuelve si el sprite tiene los bordes suavizados. sprite_get_preload(ind) Devuelve si el sprite debe ser cargado al principio del juego. sprite_get_xoffset(ind) Devuelve el x-offset (punto de origen en x) del sprite con el ndice especificado. sprite_get_yoffset(ind) Devuelve el y-offset (punto de origen en y) del sprite con el ndice especificado. sprite_get_bbox_left(ind) Devuelve el valor del lmite izquierdo del sprite (bounding box) con el ndice especificado. sprite_get_bbox_right(ind) Devuelve el valor del lmite derecho del sprite (bounding box) con el ndice especificado. sprite_get_bbox_top(ind) Devuelve el valor del lmite superior del sprite (bounding box) con el ndice especificado. sprite_get_bbox_bottom(ind) Devuelve el valor del lmite inferior del sprite (bounding box) con el ndice especificado. sprite_get_bbox_mode(ind) Devuelve el modo usado para la caja de controno del sprite (0=automatic, 1=full image,
2=manual).

sprite_get_precise(ind) Devuelve si el sprite con el ndice dado utiliza la colisin precisa (precise collision checking).

Sonidos

Las funciones siguientes te dan informacin sobre los sonidos:

sound_exists(ind) Devuelve si un sonido con el ndice dado existe. sound_get_name(ind) Devuelve el nombre del sonido con el ndice dado. sound_get_kind(ind) Devuelve el tipo de sonido del sonido especificado (0=normal, 1=background, 2=3d, 3=mmplayer). sound_get_preload(ind) Devuelve si el sonido especificado debe cargarse al principio del juego.
Los sonidos usan muchos recursos y algunos sistemas slo pueden guardar y hacer sonar un nmero limitado de ellos. Si haces un juego muy grande, deberas llevar un control sobre los sonidos que se cargan en la memoria de audio en cada momento. Podras desactivar la opcin Preload para asegurarte de que los sonidos no se carga hasta que van a ser usados (aunque este mtodo puede originar cierto retraso la primera vez que se escuche el sonido). Adems, los sonidos no se eliminan de la memoria cuando ya no van a ser utilizados. Para controlar esto puedes usar las siguientes funciones:

sound_discard(index) Elimina el sonido indicado de la memoria de audio. sound_restore(index) Carga el sonido indicado en la memoria de audio para que se pueda utilizar cuando se necesite
inmediatamente.

Fondos
Las siguientes funciones te darn informacin acerca de un fondo :

background_exists(ind) Devuelve si el background (fondo) con el ndice dado existe. background_get_name(ind) Devuelve el nombre del fondo con el ndice indicado. background_get_width(ind) Devuelve el ancho del fondo con el ndice indicado. background_get_height(ind) Devuelve la altura del fondo con el ndice especificado. background_get_transparent(ind) Devuelve si el fondo con el ndice indicado es transparente. background_get_smooth(ind) Devuelve si el fondo tiene los bordes suavizados. background_get_preload(ind) Devuelve si el fondo debe ser cargado al principio del juego.

Fuentes
Las funciones siguientes te dan informacin sobre las fuentes:

font_exists(ind) Devuelve si la fuente con el ndice especificado existe. font_get_name(ind) Devuelve el nombre de la fuente con el ndice especificado. font_get_fontname(ind) Devuelve el nombre de fuente (arial, verdana,...) de la fuente con el ndice especificado. font_get_bold(ind) Devuelve si la fuente con el ndice especificado est en negrita. font_get_italic(ind) Devuelve si la fuente con el ndice especificado es cursiva.

font_get_first(ind) Devuelve el primer carcter de la fuente con el ndice especificado. font_get_last(ind) Devuelve el ltimo carcter de la fuente con el ndice especificado.

Paths
Las funciones siguientes te proporcionarn informacin sobre un path:

path_exists(ind) Devuelve si el path con el ndice dado existe. path_get_name(ind) Devuelve el nombre del path con el ndice dado. path_get_length(ind) Devuelve la longitud del path con el ndice indicado. path_get_kind(ind) Devuelve el tipo de conexiones del path con el ndice especificado (0=recto, 1=curvo). path_get_closed(ind) Devuelve si el path es cerrado o no. path_get_precision(ind) Devuelve la precisin utilizado para paths redondeadas. path_get_number(ind) Devuelve el nmero de puntos del path. path_get_point_x(ind,n) Devuelve la coordenada x del punto n del path. El primer punto es el 0. path_get_point_y(ind,n) Devuelve la coordenada y del punto n del path. El primer punto es el 0. path_get_point_speed(ind,n) Devuelve la velocidad del punto n del path. El primer punto es el 0. path_get_x(ind,pos) Devuelve la coordenada x en la posicin pos del path (pos debe estar comprendida entre 0 y 1). path_get_y(ind,pos) Devuelve la coordenada y en la posicin pos del path (pos debe estar comprendida entre 0 y 1). path_get_speed(ind,pos) Devuelve la velocidad en la posicin pos del path (pos debe estar comprendida entre 0 y 1).

Scripts
Las siguientes opciones te darn informacin acerca de un script:

script_exists(ind) Devuelve si un script con el ndice indicado existe. script_get_name(ind) Devuelve el nombre del script con el ndice indicado. script_get_text(ind) Devuelve la cadena de texto del script con el ndice dado.

Time lines
Las funciones siguientes te dan informacin sobre las time lines:

timeline_exists(ind) Devuelve si la time line con el ndice especificado existe. timeline_get_name(ind) Devuelve el nombre de la time line con el ndice especificado.

Objetos

Las siguientes funciones proporcionarn informacin acerca de un objeto:

object_exists(ind) Devuelve si el objeto con el ndice dado existe. object_get_name(ind) Devuelve el nombre del objeto con el ndice dado. object_get_sprite(ind) Devuelve el ndice del sprite por defecto del objeto con el ndice especificado. object_get_solid(ind) Devuelve si el objeto con el ndice dado es slido por defecto. object_get_visible(ind) Devuelve si el objeto con el ndice dado es visible por defecto. object_get_depth(ind) Devuelve la profundidad del objeto con el ndice dado. object_get_persistent(ind) Devuelve si el objeto con el ndice sealado es persistente. object_get_mask(ind) Devuelve el ndice de la mscara del objeto con el ndice dado (-1 si no tiene mscara especial). object_get_parent(ind) Devuelve el ndice del objeto pariente del objeto ind (-1 si no tiene pariente). object_is_ancestor(ind1,ind2) Devuelve si el objeto ind2 es un parent del objeto ind1.

Rooms
Las siguientes funciones darn informacin acerca de una habitacin:

room_exists(ind) Devuelve si el cuarto con el ndice sealado existe. room_get_name(ind) Devuelve el nombre de la habitacin con el ndice dado.

Observa que como las habitaciones cambian durante el juego hay otras rutinas para obtener informacin de la habitacin actual.

Modificando los recursos


Estas funciones slo estn disponibles en la versin registrada de Game Maker. Es posible crear nuevos recursos durante el juego. Tambin se pueden cambiar recursos existentes. Las posibilidades se muestran en este captulo. Pero se debe tener cuidado: la modificacin de recursos fcilmente puede llevar a errores en los juegos!!! Al modificar recursos, se deben seguir las siguientes reglas: No cambies recursos que estn siendo utilizados. Esto provocar errores! Por ejemplo, no cambies un sprite que est siendo utilizado por alguna instancia. Cuando guardas/salvas el juego mientras se est ejecutando, los recursos agregados y modificados NO son guardados con el juego. Por lo que, si ms tarde se carga el juego, los recursos modificados podran no estar disponibles. En general, cuando se manipulan recursos ya no se puede hacer uso del sistema interno de salvado y carga de juegos. Cuando reinicias un juego mientras est en ejecucin, los recursos modificados no son reestablecidos a su forma original. En general, cuando se manipulan recursos ya no se puede hacer uso de la accin o de la funcin para reiniciar el juego. La manipulacin de recursos puede ser muy lenta. Por ejemplo, el cambiar sprites o fondos es relativamente lento. Por lo que no es cambiarlos durante la ejecucin del juego. La creacin de recursos durante la ejecucin del juego (en particular los sprites y fondos) fcilmente consume gran cantidad de memoria. Se debe ser extremadamente cuidadoso con esto. Por ejemplo, si se tiene un un sprite 128x128 con 32 cuadros de animacin y decides crear 36 copias rotadas estars usando 36x32x128x128x4 = 36 MB de memoria! Se deben eliminar los recursos que ya no son utilizados. De otra forma pronto se ocupara toda la memoria del sistema.

En general, no se deben modificar recursos durante el juego. Es mejor crear y cambiar los recursos al inicio del juego o quiz al inicio de una habitacin.

Las funciones para modificar recursos se dividen en las siguientes secciones: Sprites Sonidos Fondos Fuentes Paths Scripts Time lines Objetos Rooms

Sprites
Las siguientes funciones permiten modificar las propiedades de los sprites:

sprite_set_offset(ind,xoff,yoff) sprite_set_bbox_mode(ind,mode)
completa, 2 = manual).

Establece el offset del sprite.

Establece a mode el tipo de caja de colisin del sprite (0 = automtica, 1 = imagen

sprite_set_bbox(ind,left,top,right,bottom)
cuando es manual el modo de caja de colisin.

Configura la caja de colisin del sprite con ndice ind. Funciona solo

sprite_set_precise(ind,mode)

Establece si el sprite con ndice ind usa chequeo de colisin precisa (true o false).

Las siguientes funciones pueden utilizarse para crear nuevos sprites y para eliminarlos.

sprite_duplicate(ind)
algn error.

Crea una copia del sprite con ndice ind. Devuelve el ndice del nuevo sprite. Devuelve -1 si se presenta

sprite_assign(ind,spr)

Asigna el sprite spr al al sprite con ndice ind. Es decir, crea una copia del sprite. De esta manera

fcilmente puedes asignar un sprite existente a p. ej. un nuevo sprite.

sprite_merge(ind1,ind2)

Fusiona las imagines del sprite ind2 en el sprite ind1, agregndolas al final de este ultimo. Si los

tamaos no corresponden los sprites son encogidos. No se elimina el sprite ind2!

sprite_add(fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig) imgnumb

Agrega a los

recursos sprites la imagen del archivo fname. Solo se pueden agregar imgenes bmp, jpg y gif. Cuando se trata de un bmp o jpg la imagen puede ser una tira que contenga las subimgenes del sprite una junto a la otra. Se usa para indicar el nmero de subimgenes

(1 para una sola). Este argumento no es empleado con imgenes gif (animadas); se emplea el nmero de imgenes del archivo gif.

precise

indica si se usar chequeo de colisin precisa. indica si se alisarn los bordes.

transparent

indica si la imagen es parcialmente

transparente. texturas.

smooth

preload

indica si se precargar la imagen en la memoria de

xorig y yorig

indican la posicin de origen en el sprite. La funcin devuelve el ndice del nuevo sprite. Si ocurre algn error

devuelve -1.

sprite_replace(ind,fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig)
mismo que la anterior pero en este caso se reemplaza al sprite con ndice ind. El valor devuelvo por la funcin indica si tuvo xito la operacin.

Lo

sprite_create_from_screen(x,y,w,h,precise,transparent,smooth,preload,xorig,yorig)
ea un nuevo sprite copiando de un rea indicada de la pantalla. Esto permite crear cualquier sprite que se desee. Se dibuja la imagen en pantalla empleando las funciones de dibujado y luego se crea un sprite con ella. (Si no se hace dentro del evento drawing an se puede hacer de manera que no sea visible si no se refresca la pantalla). Los dems parmetros son similares a los indicados en las anteriores funciones. La funcin devuelve el ndice del sprite. Pero se poner algo de cuidado aqu. Aunque se habla de la pantalla, de hecho, lo que

Cr

importa es el rea en donde se dibuja. No importa el hecho de que haya una ventana en pantalla y que la imagen pudiera estar escalada en esta ventana.

sprite_add_from_screen(ind,x,y,w,h) sprite_delete(ind)

Agrega un rea de la pantalla como la siguiente subimagen del sprite con ndice

ind. x, y, w y h indican las dimensiones del rea en pantalla (coordenadas x, y, ancho y alto). Elimina el sprite, liberando la memoria utilizada.

Se cuenta con la siguiente rutina para cambiar la apariencia de un sprite.

sprite_set_alpha_from_sprite(ind,spr)

Cambia los valores alfa (transparencia) del sprite con ndice ind usando los

valores de luminosidad (hue) del sprite spr. Esta accin no se puede deshacer.

Sonidos
Las siguientes rutinas pueden ser utilizadas para crear nuevos sonidos y para eliminarlos.

sound_add(fname,kind,preload)

Agrega un recurso de sonido al juego. Fname es el nombre del archive de sonido. kind

indica el tipo de sonido (0=normal, 1=de fondo, 2=3D, 3=mmplayer), preload indica si el sonido debiera ser almacenado inmediatamente en la memoria de audio (true o false). La funcin devuelve el ndice del nuevo sonido, que puede utilizarse para reproducirlo. (O devolver -1 si ocurriera algn error, p. ej. que el archivo no existiera).

sound_replace(index,fname,kind,loadonuse)

Lo mismo que la anterior pero esta vez no se crea un nuevo sonido

sino que se sustituye el que tenga ndice index, liberando el anterior sonido. El valor devuelto por esta funcin indica si tuvo xito la operacin.

sound_delete(index)

Elimina el sonido index, liberando toda la memoria asociada con l. Ya no es posible recuperarlo.

Fondos
Las siguientes rutinas pueden ser empleadas para crear nuevas imgenes de fondo y para eliminarlas.

background_duplicate(ind)
presenta algn error se devuelve -1.

Crea un duplicado del fondo con el ndice ind. Devuelve el ndice del nuevo fondo. Cuando se

background_assign(ind,back)

Asigna el fondo back al fondo ind. Esto es, crea una copia del fondo. Agrega la imagen almacenada en el archivo fname al indica si la imagen es parcialmente

background_add(fname,transparent,smooth,preload)
juego de recursos background. Solo se pueden manejar imgenes bmp y jpg. transparente.

transparent

smooth

indica si se alisarn los bordes.

preload

indica si se precargar la imagen en la memoria de texturas. La

funcin devuelve el ndice del nuevo fondo, el cual se puede usar para dibujarlo o para asignarlo a la variable background_index[0] para hacerlo visible en la habitacin actual. Devuelve -1 cuando ocurre algn error.

background_replace(ind,fname,transparent,smooth,preload)

Lo mismo que la anterior pero en este caso

el fondo con ndice ind es reemplazado. La funcin devuelve un valor indicando si tuvo xito la operacin. Cuando el fondo reemplazado es visible en la habitacin ser reemplazado.

background_create_color(w,h,col,preload)
col. Devuelve el ndice del nuevo fondo, -1 si ocurre algn error.

Crea un nuevo fondo del tamao dado (w=ancho, h=alto) con el color

background_create_gradient(w,h,col1,col2,kind,preload)

Crea un fondo del tamao indicado (w=ancho,

h=alto) coloreado con un gradiente. col1 y col2 indican los dos colores. kind es un nmero entre 0 y 5 que indica el tipo de gradiente: 0=horizontal, 1=vertical, 2=rectngulo, 3=elipse, 4=doble horizontal, 5=doble vertical. Esta funcin devuelve el ndice del nuevo fondo, -1 si ocurre algn error.

background_create_from_screen(x,y,w,h,transparent,smooth,preload)

Crea un fondo copiando un

rea indicada de la pantalla (x, y=coordenadas esquina superior izquierda, w=ancho, h=alto). Esta funcin permite crear cualquier fondo que se desee. Se dibuja la imagen en pantalla usando las funciones de dibujo y a continuacin se crea un nuevo fondo de ella. (Si no se hace esto en el evento drawing incluso se puede lograr que no sea visible en pantalla si no se refresca). Los otros parmetros son similares a los de las anteriores funciones. La funcin devuelve el ndice del nuevo fondo. Se requiere algo de cuidado aqu. Aunque se habla de la pantalla, lo que importa es la regin en la que se dibuja. No importa el hecho de que haya una ventana en pantalla y que la imagen en ella pudiera estar escalada.

background_delete(ind)

Elimina el fondo, liberando la memoria utilizada.

La siguiente rutina permite cambiar la apariencia de un fondo.

background_set_alpha_from_background(ind,back)

Cambia los valores alfa (transparencia) del fondo con

ndice ind usando los valores hue del fondo back. Esta accin no puede deshacerse.

Fuentes
Es posible crear, reemplazar y eliminar fuentes durante el juego usando las siguientes funciones. (No se debe reemplazar una fuente que est configurada como la actual o en su caso se debe reestablecer la fuente despus del cambio).

font_add(name,size,bold,italic,first,last) font_add_sprite(spr,first,prop,sep)

Agrega una nueva fuente y devuelve su ndice. Se indica el tamao

(size), si es negrita (bold), cursiva (italic) y el primer y ultimo caracteres que deben ser creados (first y last). Agrega una nueva fuente y devuelve su ndice. La fuente es creada de un sprite.

El sprite debe contener una subimagen para cada carcter. first indica el ndice del primer carcter en el sprite. Por ejemplo, se puede usar ord('0') si el sprite solo contiene los dgitos. prop indica si la fuente es proporcional. En una fuente proporcional, para cada carcter el ancho de la caja de colisin es utilizado como el ancho del mismo. Finalmente, sep indica la distancia que debe separar a los caracteres horizontalmente. Un valor tpico debiera estar entre 2 y 8 dependiendo del tamao de la fuente.

font_replace(ind,name,size,bold,italic,first,last) font_replace_sprite(ind,spr,first,prop,sep)
spr.

Reemplaza la fuente ind con una nueva fuente,

indicando el nombre (name), tamao (size) si es negrita (bold) o cursive (italic) y el primer y ltimo carcter que deben crearse. Reemplaza la fuente ind con una nueva fuente basada en el sprite

font_delete(ind)

Elimina la fuente con ndice ind, liberando la memoria utilizada.

Paths
Es posible crear trayectorias y agregar puntos a las mismas. Sin embargo, nunca debe modificarse una trayectoria que est siendo usada por alguna instancia. Se pueden provocar resultados inesperados. Se tienen las siguientes funciones:

path_set_kind(ind,val)

Establece el tipo de conexiones de la trayectoria ind (0=recta, 1=suave) (0=straight, 1=smooth). Establece si la trayectoria ind debe ser cerrada (true) o abierta (false).

path_set_closed(ind,closed)

path_set_precision(ind,prec)
entre 1 y 8).

Establece la precisin con la que se calcula la suavidad de la trayectoria (prec debe estar

path_add()

Agrega una nueva trayectoria vaca. Devuelve el ndice de la trayectoria. Elimina la trayectoria con ndice ind. Crea un duplicado de la trayectoria ind. Devuelve el ndice de la nueva trayectoria. Asigna la trayectoria path a la trayectoria ind. Por tanto, crea una copia de la trayectoria. De esta

path_delete(ind)

path_duplicate(ind)

path_assign(ind,path)

manera se puede fcilmente configurar una trayectoria existente a p. Ej. otra trayectoria nueva.

path_add_point(ind,x,y,speed)

Agrega un punto a la trayectoria con ndice ind, en la posicin (x,y) y con factor de

velocidad speed. Se debe recordar que un factor de 100 corresponde a la velocidad actual. Valores inferiores indican una reduccin de la velocidad y valores superiores un incremento de la misma.

path_insert_point(ind,n,x,y,speed)
(x,y) y con factor de velocidad speed.

Inserta un punto en la trayectoria con ndice ind antes del punto n, en la posicin

path_change_point(ind,n,x,y,speed)
velocidad speed.

Cambia el punto n de la trayectoria ind a la posicin (x,y) y con factor de

path_delete_point(ind,n) path_clear_points(ind) path_reverse(ind) path_mirror(ind) path_flip(ind)

Elimina el punto n de la trayectoria con ndice ind.

Limpia todos los puntos de la trayectoria ind, volvindola una trayectoria vaca.

Invierte la trayectoria ind.

Voltea horizontalmente la trayectoria ind (con respecto a su centro).

Voltea verticalmente la trayectoria ind (con respecto a su centro). Rota angle grados la trayectoria ind en contra de las manecillas del reloj (alrededor de su centro). Escala la trayectoria ind con los factores indicados (con respecto a su centro). Mueve la trayectoria con los valores indicados.

path_rotate(ind,angle)

path_scale(ind,xscale,yscale) path_shift(ind,xshift,yshift)

Scripts
No se pueden modificar los scripts durante la ejecucin del juego. Los scripts son una parte de la lgica del juego. La modificacin de los mismos llevara a una autoreescritura de cdigo que muy fcilmente llevara a errores. Hay otras formas de hacer algo parecido. Si realmente se necesita ejecutar una pieza de cdigo no conocida en tiempo de diseo (p. ej. Desde un archivo) se pueden hacer uso de las siguientes funciones:

execute_string(str) execute_file(fname)

Ejecuta el fragmento de cdigo en la cadena str. Ejecuta el cdigo dentro del archive fname.

En ocasiones se quiere almacenar en una variable el ndice de un script para luego ejecutarlo. Para ello se puede utilizar la siguiente funcin

script_execute(scr,arg0,arg1,...)

Ejecuta el script con ndice scr con los argumentos indicados.

Time lines

Las siguientes rutinas permiten la creacin y modificacin de las time lines. No se deben alterar las lneas de tiempo que estn en uso!

timeline_add()

Agrega una nueva lnea de tiempo. Devuelve el ndice de la misma. Elimina la lnea de tiempo con ndice ind. Debe asegurarse que ninguna instancia emplee dicha lnea de

timeline_delete(ind)
tiempo en ninguna habitacin.

timeline_moment_add(ind,step,codestr)

Agrega una accin de cdigo a la lnea de tiempo en el instante step. codestr

contiene el cdigo para las acciones. Si el step no existe se crea. Por lo que pueden agregarse mltiples acciones de cdigo para el mismo instante.

timeline_moment_clear(ind,step)
(ind) en un instante (step) en particular.

Se puede utilizar esta funcin para borrar todas las acciones de una lnea de tiempo

Objetos
Tambin los objetos pueden ser manipulados y creados en tiempo de ejecucin. NUNCA se debe cambiar o eliminar un objeto del cual existan instancias. Esto puede provocar efectos inesperados ya que ciertas propiedades son almacenadas en la instancia y, por tanto, al cambiarlas en el objeto no se tendr el efecto deseado.

object_set_sprite(ind,spr)

Establece el sprite para el objeto con ndice ind. El valor -1 remueve del objeto el sprite actual. Establece si al crear instancias del objeto ind debern considerarse slidas (true o false). Establece si las instancias creadas del objeto ind deben ser visibles por defecto (true o

object_set_solid(ind,solid) object_set_visible(ind,vis)
false).

object_set_depth(ind,depth)

Establece la profundidad (depth) por defecto de las instancias creadas del objeto ind. Establece si las instancias creadas del objeto deben ser persistentes por defecto (true

object_set_persistent(ind,pers)
o false).

object_set_mask(ind,spr)
objeto se puede usar -1.

Establece el sprite para la mscara del objeto con ndice ind. Para que la mscara sea el sprite del

object_set_parent(ind,obj)

Establece el padre (obj) para el objeto ind. Si se usa -1 se indica que el objeto ind no tiene

padre. El cambiar el objeto padre cambia el comportamiento de las instancias del objeto.

Las siguientes rutinas son tiles para crear objetos mientras el juego se ejecuta. Como con todas las rutinas de modificacin de recursos, se debe ser muy cuidadoso para que no se creen nuevos objetos todo el tiempo.

object_add()

Agrega un nuevo objeto. Devuelve el ndice del mismo. Despus se puede utilizar este ndice en las rutinas anteriores

para configurar ciertas propiedades del objeto y luego se puede utilizar el ndice para crear instancias del objeto.

object_delete(ind)
las habitaciones.

Elimina el objeto con ndice ind. Se debe asegurar de que no existan instancias de este objeto en ninguna de

object_event_add(ind,evtype,evnumb,codestr)

Para asignarle un comportamiento a un objeto se deben definir

eventos para dicho objeto. Solo se pueden agregar acciones de cdigo. Se debe indicar el objeto (ind), el tipo de evento (evtype), el nmero de evento (evnumb, se pueden usar las constantes indicadas antes para la funcin event_perform()). Por ultimo se proporciona la cadena

de cdigo que debe ejecutarse (codestr). Se pueden agregar mltiples acciones a cada evento.

object_event_clear(ind,evtype,evnumb)
evento en particular.

Se puede emplear esta funcin para borrar todas las acciones para un

La creacin de objetos es en particular muy til cuando se estn diseando scripts o bibliotecas de acciones. Por ejemplo, un script de inicializacin puede crear un objeto para mostrar un texto y otro script puede agregar un objeto con un texto en particular. De esta forma se tiene un mecanismo simple para desplegar mensajes sin la necesidad de crear objetos usando la interfaz estndar.

Rooms
La manipulacin de habitaciones en tiempo de ejecucin es algo muy riesgoso. Se debe tomar en cuenta que las habitaciones cambian todo el tiempo debido a lo que ocurre dentro del juego. Esto normalmente solo ocurre para la habitacin en turno y hay muchas rutinas descritas en anteriores secciones para manipular las instancias, los fondos y los tiles en la habitacin actual. Pero los cambios en la habitacin active se mantendrn si dicha habitacin es persistente. Entonces, nunca se debieran manipular elementos de la habitacin en turno o de cualquier otra habitacin que sea persistente y que ya haya sido visitada antes. Tales cambios en general no sern percibidos pero en ocasiones podran ocasionar errores inesperados. Debido al hecho de que las habitaciones estn enlazadas de manera complicada no hay ninguna rutina que permita eliminar una habitacin.

Las siguientes funciones estn disponibles

room_set_width(ind,w)

Establece el ancho (w) para la habitacin con ndice ind. Establece la altura (h) para la habitacin con ndice ind. Establece el ttulo (caption) para la habitacin con ndice ind. Establece si la habitacin con ndice ind ser persistente o no (val).

room_set_height(ind,h)

room_set_caption(ind,str) room_set_code(ind,str)

room_set_persistent(ind,val)

Configura el cdigo de inicializacin (str) para la habitacin con ndice ind. Configura las propiedades de color para la habitacin con ndice ind si no

room_set_background_color(ind,col,show)

cuenta con una imagen de fondo. col indica el color y show indica si el color debe mostrarse o no.

room_set_background(ind,bind,vis,fore,back,x,y,htiled,vtiled,hspeed,vspeed,alpha)

Es

tablece el fondo con ndice bind (0-7) como fondo para la habitacin con ndice ind. vis indica si el fondo ser visible y fore si se trata de un fondo de primer plano. back es el ndice de la imagen de fondo. x, y indican la posicin de la imagen y htiled y vtiled indican si la imagen debe dividirse en tiles. hspeed y vspeed indican la velocidad con la que el fondo se mueve y alpha indica un valor de transparencia alfa (1 = slido y ms rpido).

room_set_view(ind,vind,vis,xview,yview,wview,hview,xport,yport,wport,hport,hborder, vborder,hspeed,vspeed,obj)
Establece la vista con ndice vind (0-7) para la habitacin con ndice ind. vis indica si la vista es

visible. xview, yview, wview y hview indican la posicin de la vista en la habitacin. xport, yport, wport y hport indican la posicin en pantalla. Cuando la vista debe seguir a un objeto hborder y vborder indican el borde mnimo visible que debe mantenerse alrededor del objeto. hspeed y vspeed indican la mxima velocidad con la que la vista puede moverse. obj es el ndice del objeto o el ndice de la instancia.

room_set_view_enabled(ind,val) room_add()

Establece si las vistas deben habilitarse para la habitacin con ndice ind.

Agrega una nueva habitacin. Devuelve el ndice de la misma. Se debe notar que la habitacin no formar parte del orden

de habitaciones. Por lo que la nueva habitacin no cuenta con habitaciones previa ni siguiente. Si se desea moverse a una habitacin agregada se debe indicar el ndice de la misma.

room_duplicate(ind)

Agrega una copia de la habitacin con ndice ind. Devuelve el ndice de la nueva habitacin. Asigna la habitacin room al ndice ind. Por tanto, esta funcin crea una copia de la habitacin. Agrega a la habitacin ind una nueva instancia del objeto obj, colocndola en la posicin

room_assign(ind,room)

room_instance_add(ind,x,y,obj)
x, y. Devuelve el ndice de la instancia.

room_instance_clear(ind)

Elimina todas las instancias dentro de la habitacin ind.

room_tile_add(ind,back,left,top,width,height,x,y,depth) Agrega un nuevo tile a la habitacin en la


posicin indicada. Devuelve el ndice del tile. back es el fondo del cual se toma el tile. Left, top, width y height indican la parte del fondo que forma al tile. x, y es la posicin del tile en la habitacin y depth es la profundidad del tile.

room_tile_add_ext(ind,back,left,top,width,height,x,y,depth,xscale, yscale,alpha)

Lo

mismo que la anterior rutina pero tambin se puede especificar un factor de escalado en las direcciones x e y, y una transparencia alpha para el tile.

room_tile_clear(ind)

Elimina todos los tiles de la habitacin indicada.

Archivos, registro, y ejecucin de programas

En juegos ms avanzados probablemente querrs leer datos de un archivo que has incluido con el juego. Por ejemplo, pudieras crear un archivo que indique en qu momento deben ocurrir ciertas cosas. Probablemente tambin quieras guardar informacin para la siguiente vez que se ejecute el juego (por ejemplo, el cuarto actual). En algunas situaciones puede ser que necesites ejecutar programas externos, o crear nuevos archivos con datos del juego.

Puedes encontrar toda la informacin sobre estos temas en las secciones siguientes: Archivos Registro Archivos INI Ejecucin de programas

Archivos

Es til utilizar archivos externos en juegos. Por ejemplo, podras hacer un archivo que describe qu ciertas cosas deben suceder en qu momento. Tambin puedes querer salvar la informacin para la prxima vez que se ejecute el juego. Las funciones siguientes sirven para leer y escribir datos en archivos de texto:

file_text_open_read(fname) Abre el archivo fname para lectura. La funcin devuelve la id del archivo que debes utilizar en el
resto de funciones. Puedes abrir hasta un mximo de 32 archivos simultneamente. No olvides cerrar los archivos una vez que no los necesites.

file_text_open_write(fname) Abre el archivo fname para escritura, crendolo si no existe. La funcin devuelve la id del
archivo que debes usar en las dems funciones.

file_text_open_append(fname) Abre el archivo fname para agregar datos al final, crendolo si no existe. La funcin
devuelve la id del archivo que debes usar en las dems funciones.

file_text_close(fileid) Cierra el archivo indicado por fileid (No olvides llamarla!). file_text_write_string(fileid,str) Escribe la cadena str al archivo indicado por fileid. file_text_write_real(fileid,x) Escribe el valor real x en el archivo indicado por fileid. file_text_writeln(fileid) Escribe un carcter de nueva lnea en el archivo. file_text_read_string(fileid) Lee una cadena del archivo y devuelve esta cadena. Una cadena termina al final de la
lnea.

file_text_read_real(fileid)

Lee un valor real del archivo y devuelve este valor.

file_text_readln(fileid) Salta el resto de la lnea en el archivo e inicia al principio de la siguiente lnea. file_text_eof(fileid) Indica si hemos llegado al final del archivo.

Para manipular archivos del sistema puedes utilizar las siguientes funciones:

file_exists(fname) Indica si el archivo con el nombre fname existe (true) o no (false).

file_delete(fname) Borra el archivo con el nombre fname. file_rename(oldname,newname) Renombra el archivo con el nombre oldname a newname. file_copy(fname,newname) Copia el archivo fname al nombre newname directory_exists(dname) Indica si la carpeta dname existe. directory_create(dname) Crea una carpeta con el nombre dname (incluyendo la ruta a esa carpeta) si no existe. file_find_first(mask,attr) Devuelve el nombre del primer archivo que satisfaga las condiciones de la mscara mask y los
atributos attr. Si no existe tal archivo, devuelve una cadena vaca. La mscara puede contener una ruta y comodines (*), por ejemplo C:\temp\*.doc. Los atributos indican archivos adicionales que quieras ver. (Por lo que los archivos normales son siempre devueltos cuando satisfacen la mscara). Puedes agregar las siguientes constantes para ver el tipo de archivos que desees:

fa_readonly archivos de slo lectura fa_hidden archivos ocultos fa_sysfile archivos de sistema fa_volumeid archivos volume-id fa_directory carpetas fa_archive archivos archivados file_find_next() Devuelve el nombre del siguiente archivo que satisface la mscara y los atributos indicados previamente. Si no
existe tal archivo, devuelve una cadena vaca.

file_find_close() Debe ser llamada despus de manipular los archivos para liberar la memoria. file_attributes(fname,attr) Indica si el archivo fname tiene todos los atributos dados por attr. Usa una combinacin de las
constantes indicadas anteriormente.

Las siguientes funciones sirven para cambiar los nombres de archivos. Observa que estas funciones no afectan a los archivos en s, si no al nombre:

filename_name(fname) Devuelve el nombre del archivo fname, con la extensin pero sin la ruta. filename_path(fname) Devuelve la ruta al archivo indicado, incluyendo la ltima barra de separacin. filename_dir(fname) Devuelve el directorio del archivo, que normalmente suele ser igual que la ruta pero sin la ltima barra de
separacin.

filename_drive(fname) Devuelve la informacin de la unidad del archivo. filename_ext(fname) Devuelve la extensin del archivo, incluyendo el punto. filename_change_ext(fname,newext) Devuelve el nombre del archivo con la extensin sustituida por newext. Si indicas
una cadena de texto vaca para newext puedes eliminar la extensin del archivo.

En algunas situaciones puede que quieras leer datos de archivos binarios. Para ello dispones de las siguientes rutinas de bajo nivel:

file_bin_open(fname,mod) Abre el archivo con el nombre especificado. El parmetro mod indica qu se puede hacer con el
archivo: 0=leer, 1=escribir y 2= leer y escribir. La funcin devuelve la id del archivo que debe utilizarse en las dems funciones. Puedes abrir hasta un mximo de 32 archivos simultneamente, pero no olvides cerrarlos cuando hayas terminado con ellos.

file_bin_rewrite(fileid) Limpia el archivo indicado por fileid, es decir, borra todo su contenido y se sita al principio del
archivo para empezar a escribir.

file_bin_close(fileid) Cierra el archivo especificado. No olvides llamarla! file_bin_size(fileid) Devuelve el tamao en bytes del archivo indicado. file_bin_position(fileid) Devuelve la posicin actual en el archivo en bytes (0 es el principio del archivo). file_bin_seek(fileid,pos) Mueve la posicin en el archivo a la posicin indicada por pos. Para aadir contenido al final de
un archivo, usa el valor file_bin_size(fileid) para el parmetro pos.

file_bin_write_byte(fileid,byte) Escribe un byte de datos al archivo especificado. file_bin_read_byte(fileid) Lee un byte de datos del archivo.

Si el jugador ha seleccionado modo seguro en sus preferencias, para ciertas rutinas, no se permite especificar la ruta y slo puedes acceder a los archivos en la carpeta de la aplicacin p. Ej. para escribir en ellos.

Las siguientes tres variables de slo lectura pueden ser tiles:

game_id* Identificador nico para el juego. Puedes usarlo si necesitas un nombre nico de archivo. working_directory* Carpeta de trabajo del juego. (No incluye la diagonal invertida final). temp_directory* Carpeta temporal creada para el juego. Puedes almacenar archivos temporales aqu. Sern eliminados cuando el
juego finalice.

En ciertas situaciones podras dar al jugador la posibilidad de introducir argumentos mediante la lnea de comandos al juego que estn ejecutando (para por ejemplo activar trucos o modos especiales). Para obtener estos argumentos puedes usar las siguientes dos rutinas:

parameter_count() Devuelve el nmero de parmetros de la lnea de comandos (nota que el nombre del programa es uno de
ellos).

parameter_string(n) Devuelve los parmetros n de la lnea de comandos. El primer parmetro tiene ndice 0 y es el nombre del
programa.

Por ltimo, puedes leer el valor de las variables de entorno con la siguiente funcin:

environment_get_variable(name) Devuelve el valor (una cadena de texto) de la variable de entorno con el nombre
especificado.

Registro
Si deseas almacenar una pequea cantidad de informacin entre cada ejecucin del juego hay un mecanismo ms simple que el emplear un archivo. Puedes usar el registro. El registro es una gran base de datos de Windows para mantener todo tipo de configuraciones para los programas. Una entrada tiene un nombre, y un valor. Puedes usar tanto cadenas como valores reales. Tenemos las siguientes funciones:

registry_write_string(name,str) Crea una entrada en el registro con el nombre name y como valor la cadena str. registry_write_real(name,x) Crea una entrada en el registro con el nombre name y el valor real x.

registry_read_string(name) Devuelve la cadena almacenada con el nombre name. (El nombre debe existir, de otra forma se
devuelve una cadena vaca).

registry_read_real(name) Devuelve el valor real almacenado en la entrada name. (El nombre debe existir, de otra forma se
devuelve el nmero 0).

registry_exists(name) Indica si la entrada name existe.

En realidad, los valores en el registro estn agrupados en claves. Las rutinas anteriores trabajan con valores dentro de la clave que est creada especialmente para tu juego. Tu programa puede usar esto para obtener cierta informacin sobre el sistema en el que se est ejecutando el juego. Tambin puedes leer valores en otras claves. Puedes escribir valores en ellas pero ten mucho cuidado. PUEDES FCILMENTE DESTRUIR TU SISTEMA de esta forma. (La escritura no se permite en modo seguro). Nota que las claves tambin estn colocadas en grupos. Las siguientes rutinas trabajan por defecto con el grupo HKEY_CURRENT_USER. Pero si quieres puedes cambiar este grupo raz de trabajo. Por ejemplo, para obtener el directorio temporal actual, usa:

path = registry_read_string_ext('\Environment','TEMP');

Las siguientes funciones existen para moverte por el registro con libertad:

registry_write_string_ext(key,name,str) Crea una entrada en el registro dentro de la clave key con el nombre
name y como valor la cadena str.

registry_write_real_ext(key,name,x) Crea una entrada en el registro dentro de la clave key con el nombre name y el
valor real x.

registry_read_string_ext(key,name) Devuelve la cadena con el nombre name dentro de la clave key (el nombre debe
existir, de otra forma se devuelve una cadena vaca).

registry_read_real_ext(key,name) Devuelve el valor real con el nombre name en la clave key (el nombre debe existir,
de otra forma se devuelve el nmero 0).

registry_exists_ext(key,name) Indica si el nombre name existe dentro de la clave key. registry_set_root(root) Configura la raz para las otras rutinas. Usa los siguientes valores: 0 = HKEY_CURRENT_USER 1 = HKEY_LOCAL_MACHINE 2 = HKEY_CLASSES_ROOT 3 = HKEY_USERS

Archivos INI

Para pasar ciertos parmetros a un programa es corriente utilizar los archivos INI. Los archivos INI contienen secciones y cada seccin contiene un nmero de parejas nombre-valor. Por ejemplo:

[Form] Arriba=100 Izquierda=100 Titulo=El mejor juego de la historia [Game] MaxScore=12324


Este archivo contiene dos secciones: la primera llamada Form y la segunda llamada Game. Primera seccin contiene 3 parejas de valores. Las dos primeras tienen un valor real mientras que la tercera es una cadena de texto. Los archivos INI son muy fciles de crear y editar. En Game Maker puedes utilizar las siguientes funciones para esto:

ini_open(name) Abre el archivo de INI con el nombre dado El archivo INI se debe almacenar en la misma carpeta que el juego! ini_close()Cierra el archivo INI actualmente abierto. ini_read_string(section,key,default) Lee el valor (una cadena de texto) de la llave indicada con key de la seccin
indicada como section. Cuando no existe la llave o la seccin se devuelve el valor especificado por default.

ini_read_real(section,key,default) Lee el valor real de la llave indicada con key de la seccin indicada como section.
Cuando no existe la llave o la seccin se devuelve el valor especificado por default.

ini_write_string(section,key,value) Escribe el valor value (una cadena de texto) en la llave indicada con key en la
seccin indicada con section.

ini_write_real(section,key,value) Escribe el valor real value en la llave indicada con key en la seccin indicada con
section.

ini_key_exists(section,key) Devuelve si la llave indicada existe en la seccin indicada. ini_section_exists(section) Devuelve si existe la seccin indicada. ini_key_delete(section,key) Elimina la llave indicada de la seccin indicada. ini_section_delete(section) Elimina la seccin indicada.

Ejecucin de programas
Game Maker tambin tiene la posibilidad de iniciar programas externos. Hay dos funciones disponibles para esto: execute_program y execute_shell. La funcin execute_program inicia un programa, posiblemente con algunos argumentos. Puede esperar hasta que el programa termine (pausando el juego) o continuar con el juego. La funcin execute_shell abre un archivo. Puede ser cualquier archivo para cuyo tipo est definida una asociacin, p. Ej. un archivo html, un archivo de Word, etc. O puede ser un programa. No puede esperar a que se termine la ejecucin por lo que el juego contina.

execute_program(prog,arg,wait) Ejecuta el programa prog con los argumentos arg. wait indica si se debe esperar a que
termine la aplicacin.

execute_shell(prog,arg) Ejecuta el programa (o archivo) en el entorno.

Ambas funciones no funcionarn si el jugador activa el modo seguro en sus preferencias. Puedes comprobar esto usando la variable de solo lectura:

secure_mode* Indica si el juego est ejecutndose en modo seguro.

Estructuras de datos
Esta funcin slo est disponible en la versin registrada de Game Maker.

En los juegos normalmente necesitas guardar informacin. Por ejemplo, necesitas guardar listas de tems que lleva un personaje o nombres de lugares que necesita visitar. Puedes usar arrays para esto. Pero si necesitas hacer operaciones ms complicadas, como ordenar los datos o buscar un tem determinado, necesitas escribir grandes trozos de cdigo en GML, que pueden ser lentos al ejecutarse.

Para remediar esto, Game Maker dispone de un nmero de funciones de estructuras de datos. Hasta el momento hay 6 tipos de estructuras de datos diferentes: stacks (pilas), queues (colas), lists (listas), maps (mapas), priority queues (colas de prioridad) y grids (rejillas). Cada uno de estos tipos est preparado para un uso particular.

Todas las estructuras de datos funcionan generalmente de la misma manera. Creas una estructura de datos con una funcin que devuelve la id de esa estructura y luego usas esa id para hacer diferentes operaciones. Cuando has terminado, puedes destruir la estructura para ahorrar espacio. Puedes usar tantas estructuras a la vez como desees y stas pueden guardar valores reales o cadenas de texto.

Observa que las estructuras de datos no se guardan cuando guardas el juego usando las funciones o acciones apropiadas. Para guardarlas, debers crear tu propio sistema.

Al comparar valores, por ejemplo al ordenar una lista, Game Maker debe decidir cundo dos valores son iguales. Al usar cadenas de texto y valores enteros esto es evidente, pero para valores reales, debido a errores de redondeo, nmeros iguales pueden convertirse en diferentes. Por ejemplo, (5/3)*3 no ser igual a 5. Para evitar esto, puedes especificar la precisin que deseas usar. Cuando la diferencia entre dos nmeros es menor que esta precisin, los dos nmeros se consideran iguales. Por defecto se utiliza una precisin de 0.0000001.Puedes cambiar este valor con las funciones siguientes:

ds_set_precision(prec) Especifica la precisin usada en comparaciones.


Esta precisin se utiliza en las estructuras de datos pero no en el resto de comparaciones en GML!

Las estructuras de datos disponibles son las siguientes:

Pilas Colas Listas Mapas Colas de prioridad Rejillas

Pilas
Una pila es una estructura LIFO (ltimo en entrar, primero en salir). Puedes empujar (push) valores en la pila o quitarlos tirando de ellos (pop). El ltimo valor que se empuj en la lista es el primero al que se accede al tirar de la lista. Es como si vas poniendo un libro encima de otro: cuando quieras coger un libro, el ltimo que pusiste estar encima de todos los dems y ser el que cojas. Las pilas se utilizan para gestionar interrupciones o cuando se usan funciones recursivas:

ds_stack_create() Crea una nueva pila. La funcin devuelve un nmero entero con la id de la pila para usarla en las diferentes
funciones. Puedes crear varias pilas.

ds_stack_destroy(id)
pila.

Destruye la pila, liberando la memoria usada. No olvides usar esta funcin cuando ya no necesites la

ds_stack_clear(id) Limpia la pila, borrando todos los valores que contiene pero no la destruye. ds_stack_size(id) Devuelve el nmero de valores en la pila. ds_stack_empty(id) Devuelve true si la pila est vaca. Es lo mismo que chequear si el nmero de valores en la pila es cero. ds_stack_push(id,val) Empuja el valor dentro de la pila. ds_stack_pop(id) Devuelve el valor al final de la pila (esto es, el ltimo valor introducido) y lo elimina de la pila. ds_stack_top(id) Devuelve el valor al principio de la pila (el primero que se introdujo) pero no lo elimina.

Colas
Una cola es parecido a una pila, pero funciona como una estructura FIFO (primero en entrar, primero en salir). El primer valor que se mete en la cola es el primero en salir, como una cola en una tienda. El primer cliente en llegar ser el primero en ser atendido y los dems tendrn que esperar su turno en orden. Para trabajar con colas existen las funciones siguientes (observa que las 5 primeras son equivalentes a las funciones de las pilas: todas las estructuras de datos poseen estas 5 funciones)

ds_queue_create()Crea una nueva cola. La funcin devuelve un nmero entero con la id de la cola para usarla en las diferentes
funciones. Puedes crear varias colas.

ds_queue_destroy(id) Destruye la cola, liberando la memoria usada. No olvides usar esta funcin cuando ya no necesites la
cola.

ds_queue_clear(id)Limpia la cola, borrando todos los valores que contiene pero no la destruye. ds_queue_size(id) Devuelve el nmero de valores en la cola. ds_queue_empty(id) Devuelve true si la cola est vaca. Es lo mismo que chequear si el nmero de valores en la cola es cero. ds_queue_enqueue(id,val)
Introduce el valor en la cola.

ds_queue_dequeue(id) Devuelve el ltimo valor de la cola (el primero en introducirse) y lo elimina de la cola. ds_queue_head(id) Devuelve el valor al principio de la cola, esto es, el primero que se introdujo, pero no lo elimina de la cola. ds_queue_tail(id) Devuelve el ltimo valor de la cola pero no lo elimina.

Listas
Una lista guarda una coleccin de valore en un orden determinado. Puedes aadir valores a la lista a la posicin que desees. Por eso, puedes acceder acceder a los valores usando un ndice de su posicin en la lista. Tambin puedes ordenar los elementos de forma ascendente o descendente. Las listas se pueden usar para muchas cosas, por ejemplo, para guardar valores que cambian. Las listas se han programado usando arrays, pero al estar definidas en cdigo compilado son mucho ms rpidas que los arrays.

ds_list_create()Crea una nueva lista. La funcin devuelve un nmero entero con la id de la lista para usarla en las diferentes
funciones. Puedes crear varias listas.

ds_list_destroy(id) Destruye la lista, liberando la memoria usada. No olvides usar esta funcin cuando ya no necesites la lista. ds_list_clear(id)
Limpia la lista, borrando todos los valores que contiene pero no la destruye.

ds_list_size(id) Devuelve el nmero de valores en la lista. ds_list_empty(id) Devuelve true si la lista est vaca. Es lo mismo que chequear si el nmero de valores en la lista es cero. ds_list_add(id,val) Inserta el valor al final de la lista. ds_list_insert(id,pos,val) Inserta el valor en la posicin pos. La primera posicin es 0 y la ltima es igual al tamao de la
lista menos 1.

ds_list_replace(id,pos,val) Reemplaza el valor en la posicin pos por val. ds_list_delete(id,pos) Elimina


el valor en la posicin pos.

ds_list_find_index(id,val) Devuelve la posicin en la lista del valor val. Si no encuentra el valor en la lista devuelve -1. ds_list_find_value(id,pos) Devuelve el valor en al posicin pos. ds_list_sort(id,ascend) Ordena los valores de la lista. Si ascend es true o 1 los ordena de forma ascendente, en caso
contrario los ordena de manera descendente.

Mapas
En algunas ocasiones necesitas guardar pares de valores consistentes de una llave (key) y un valor. Por ejemplo, un personaje puede llevar varios tems diferentes y puede tener un nmero diferente de cada uno. En este caso, el tem ser la llave y la cantidad ser el valor. Los mapas manejan estas parejas de valores, ordenndolos por la llave. Puedes aadir valores al mapa y buscar uno concreto usando las llaves. Como las llaves tambin estn ordenadas, puedes encontrar los valores correspondientes a la llave siguiente o anterior. A veces es til usar un mapa para guardar llaves sin ningn valor asignado. En este caso puedes asignarles a todas las llaves el valor 0.

ds_map_create()Crea un nuevo mapa. La funcin devuelve un nmero entero con la id del mapa para usarla en las diferentes
funciones. Puedes crear varios mapas.

ds_map_destroy(id) Destruye el mapa, liberando la memoria usada. No olvides usar esta funcin cuando ya no necesites el mapa. ds_map_clear(id)Limpia el mapa, borrando todos las parejas llave-valor que contiene pero no lo destruye. ds_map_size(id) Devuelve el nmero de parejas llave-valor en el mapa. ds_map_empty(id) Devuelve true si el mapa est vaca. Es lo mismo que chequear si el nmero de valores en el mapa es cero. ds_map_add(id,key,val) Aade la pareja llave (key)-valor (val) al mapa. ds_map_replace(id,key,val) Reemplaza el valor correspondiente a la llave con un nuevo valor. ds_map_delete(id,key) Elimina la pareja llave-valor especificada del mapa. Si hay varias parejas con la misma llave slo 1 es
eliminada.

ds_map_exists(id,key) Devuelve true si la llave existe en el mapa. ds_map_find_value(id,key) Devuelve el valor correspondiente a la llave. ds_map_find_previous(id,key) Devuelve la mayor llave que sea menor que la indicada. ds_map_find_next(id,key) Devuelve la menor llave que sea mayor que la indicada.

ds_map_find_first(id) Devuelve la menor llave del mapa. ds_map_find_last(id) Devuelve la mayor llave del mapa.

Colas de prioridad
En una cola de prioridad a cada valor se le asigna una prioridad. As puedes buscar los valores con mayor o menor prioridad y controlar ciertas cosas segn su prioridad.

ds_ priority _create()Crea una nueva cola. La funcin devuelve un nmero entero con la id de la cola para usarla en las
diferentes funciones. Puedes crear varias colas.

ds_ priority _destroy(id) Destruye la cola, liberando la memoria usada. No olvides usar esta funcin cuando ya no
necesites la cola.

ds_ priority _clear(id)Limpia la cola, borrando todos los valores que contiene pero no la destruye. ds_ priority _size(id) Devuelve el nmero de valores en la cola. ds_ priority _empty(id) Devuelve true si la cola est vaca. Es lo mismo que chequear si el nmero de valores en la cola es
cero.

ds_priority_add(id,val,prio) Aade el valor con la prioridad especificada a la cola. ds_priority_change_priority(id,val,prio) Cambia la prioridad del valor especificado al nuevo valor. ds_priority_find_priority(id,val) Devuelve la prioridad del valor especificado. ds_priority_delete_value(id,val) Elimina el valor (con su prioridad) de la cola de prioridad. ds_priority_delete_min(id)Devuelve el valor con la menor prioridad y lo elimina de la cola. ds_priority_find_min(id) Devuelve el valor con la menor prioridad pero no lo elimina de la cola. ds_priority_delete_max(id) Devuelve el valor con la mayor prioridad y lo elimina de la cola. ds_priority_find_max(id) Devuelve el valor con la mayor prioridad pero no lo elimina de la cola.

Rejillas
Una rejilla es simplemente un vector (o arreglo) bidimensional. Una rejilla tiene un entero con su altura y anchura. Esta estructura te permite acceder a los valores indicando el valor de la celda deseada (el primer valor en las direcciones x e y es 0). Pero tambin puedes dar valores por regiones, aadirlos y encontrar los valores mximo, mnimo o medio de una regin. Esta estructura es til para representar por ejemplo un campo de juego. Aunque todo lo que hace esta estructura se puede conseguir usando vectores, las operaciones por regiones son mucho ms rpidas.

ds_grid_create(w,h) Crea una rejilla con la anchura especificada en w y la altura especificada en h. La funcin devuelve la id de
la rejilla que debe usarse en las dems funciones.

ds_grid_destroy(id) Destruye la rejilla, liberando la memoria usada. No olvides usar esta funcin cuando ya no necesites la
rejilla.

ds_grid_resize(id,w,h) Aumenta el tamao de la rejilla a la nueva anchura y altura especificadas. Las celdas ya existentes

mantienen su valor.

ds_grid_width(id) Devuelve la anchura de la rejilla. ds_grid_height(id) Devuelve la altura de la rejilla. ds_grid_clear(id,val) Hace que todos las celdas de la rejilla tomen el valor val (puede ser un nmero o una cadena de texto). ds_grid_set(id,x,y,val)Asigna a la celda x,y el valor val. ds_grid_add(id,x,y,val) Suma el valor a la celda especificada. Para cadenas de texto, la cadena se concatena a la que ya
existe en la celda.

ds_grid_multiply(id,x,y,val) Multiplica la celda por el valor. Slo se puede usar con nmeros. ds_grid_set_region(id,x1,y1,x2,y2,val) Todas las celdas de la regin especificada toman el valor especificado. ds_grid_add_region(id,x1,y1,x2,y2,val)Suma el valor a la regin especificada. Para cadenas de texto, concatena la
cadena de texto a la existente en cada celda.

ds_grid_multiply_region(id,x1,y1,x2,y2,val) Multiplica el valor por todas las celdas de la regin (slo para
valores numricos).

ds_grid_set_disk(id,xm,ym,r,val) Da el valor especificado a toda las celdas dentro del crculo de centro xm,ym y
radio r.

ds_grid_add_disk(id,xm,ym,r,val) Suma el valor a la regin especificada por el crculo. Para cadenas de texto,
concatena la cadena de texto a la existente en cada celda.

ds_grid_multiply_disk(id,xm,ym,r,val) Multiplica el valor por todas las celdas de la regin (slo para valores
numricos).

ds_grid_get(id,x,y) Devuelve el valor de la celda indicada. ds_grid_get_sum(id,x1,y1,x2,y2) Devuelve la suma de los valores de las celdas de la regin especificada. Slo funciona
con valores numricos.

ds_grid_get_max(id,x1,y1,x2,y2) Devuelve el mximo valor de las celdas de la regin especificada. Slo funciona con
valores numricos.

ds_grid_get_min(id,x1,y1,x2,y2) Devuelve el mnimo valor de las celdas de la regin especificada. Slo funciona con
valores numricos.

ds_grid_get_mean(id,x1,y1,x2,y2) Devuelve el valor medio de las celdas de la regin especificada. Slo funciona con
valores numricos.

ds_grid_get_disk_sum(id,xm,ym,r) Devuelve la suma de los valores de las celdas de la regin circular especificada. Slo
funciona con valores numricos..

ds_grid_get_disk_min(id,xm,ym,r) Devuelve el mnimo valor de las celdas de la regin circular especificada. Slo
funciona con valores numricos.

ds_grid_get_disk_max(id,xm,ym,r) Devuelve el mximo valor de las celdas de la regin circular especificada. Slo
funciona con valores numricos.

ds_grid_get_disk_mean(id,xm,ym,r) Devuelve el valor medio de las celdas de la regin circular especificada. Slo
funciona con valores numricos.

ds_grid_value_exists(id,x1,y1,x2,y2,val) Devuelve true si el valor especificado existe en la regin.

ds_grid_value_x(id,x1,y1,x2,y2,val) Devuelve la coordenada x de la celda de la regin en la que aparece el valor


especificado.

ds_grid_value_y(id,x1,y1,x2,y2,val) Devuelve la coordenada y de la celda de la regin en la que aparece el valor


especificado.

ds_grid_value_disk_exists(id,xm,ym,r,val) Devuelve true si el valor especificado existe en la regin circular. ds_grid_value_disk_x(id,xm,ym,r,val) Devuelve la coordenada x de la celda de la regin circular en la que aparece el
valor especificado.

ds_grid_value_disk_y(id,xm,ym,r,val) Devuelve la coordenada y de la celda de la regin circular en la que aparece el


valor especificado.

Creando partculas
Esta funcin solo est disponible en la versin registrada de Game Maker.

Los sistemas de partculas se emplean para crear efectos especiales. Las partculas son pequeos elementos (ya sean representados por un pequeo sprite, un pxel o una pequea forma). Tales partculas se mueven de acuerdo a reglas predefinidas y pueden cambiar su color mientras se mueven. Muchas partculas juntas pueden crear p. Ej. Fuegos artificiales, flamas, lluvia, nieve, campos estelares, polvo, etc.

Game Maker contiene un extenso sistema de partculas que puede ser empleado para crear grandes efectos. Aunque no es sencillo de utilizar por lo que mejor lee cuidadosamente esta seccin antes de probarlo. Los sistemas de partculas tienen muchos parmetros y no siempre es fcil entender cmo crear los efectos que se desean. Si lo encuentras demasiado difcil, Game Maker tambin dispone de un sistema de efectos para crear explosiones, humo, lluvia e incluso fuegos artificiales.

Primero que nada hay tipos de partculas. Un tipo de partcula define una clase de partculas en especfico. Tales tipos pueden tener muchos parmetros que describen la forma, el tamao, color y movimiento de las partculas.

Despus tenemos los sistemas de partculas. Puede haber diferentes sistemas de partculas en un juego. Un sistema de partculas puede tener partculas de diferentes tipos. Un sistema de partculas cuenta con emisores que crean las partculas, ya sea continuamente o en estallidos. Tambin puede contar con atractores que atraen las partculas. Finalmente, puede tambin tener destructores que destruirn las partculas. Una vez que se ha creado una partcula en un sistema, sta ser automticamente dibujada y actualizada por el sistema.

La informacin sobre partculas se divide en las secciones siguientes:

Efectos simples

Tipos de partculas

Sistemas de partculas

Emisores

Atractores

Destructores

Deflectores

Cambiadores

Ejemplo de fuegos artificiales

Efectos simples

La forma ms sencilla de crear partculas es usando el mecanismo de efectos. Los efectos se crean usando partculas, pero t no tienes que preocuparte de eso. Simplemente eliges el tipo de efecto, la posicin donde debe crearse, su color y su tamao y del resto se encarga Game Maker.

Los efectos disponibles son:

ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow

Algunos slo necesitars crearlos una vez (como la explosin) mientras que otros debers crearlos en cada step (como el humo o la lluvia). Observa que los efectos de nieve y lluvia siempre se crean en la parte superior de la pantalla as que la posicin que especifiques para ellos ser irrelevante.

Aunque esto pueda sonar limitado, se pueden conseguir efectos muy espectaculares. Por ejemplo, creando una pequea nube de humo rojo debajo de una nave espacial en cada step se consigue una cola de fuego. Las dos funciones siguientes sirven para crear efectos:

effect_create_below(kind,x,y,size,color)

Crea un efecto del tipo indicado en kind en la posicin especificada. size

es el tamao del efecto segn la convencin siguiente: 0 = pequeo, 1 = mediano, 2 = grande. color indica el color del efecto. El efecto se crea por debajo de la instancia con una profundidad (depth) igual a 100000.

effect_create_above(kind,x,y,size,color)
la instancia, con una profundidad igual a-100000.

Igual que la funcin anterior, pero esta vez el efecto se crea encima de

Para eliminar todos los efectos usa la funcin:

effect_clear()

Detiene y elimina todos los efectos.

Tipos de partculas

Un tipo de particular define la forma, color y movimiento de una clase de partculas. Slo necesitas definir un tipo de partcula una vez durante el juego, una vez hecho esto puede ser usado por cualquier sistema de partculas. Los tipos de partculas tienen un gran nmero de caractersticas que pueden ser cambiadas para alterar su apariencia o comportamiento. Con la eleccin adecuada puedes crear cualquier tipo de efecto.

Las funciones para crear y destruir tipos de partculas son:

part_type_create()

Crea un Nuevo tipo de particular. Devuelve el ndice del tipo. Este ndice debe usarse en todas las llamadas

a las funciones siguientes para configurar las propiedades del tipo de partcula, por lo que es aconsejable que lo guardes en una variable global.

part_type_destroy(ind)
para ahorrar espacio.

Destruye el tipo de particular ind. Llama a esta funcin cuando ya no se necesite el tipo de partcula

part_type_exists(ind) part_type_clear(ind)

Devuelve si el tipo indicado de particular existe.

Devuelve el tipo de particular ind a sus valores por defecto.

La forma de una partcula


Las partculas tienen una forma. Esta forma se indica mediante un sprite. Puedes usar cualquier sprite que quieras para tus partculas pero debes saber que adems hay 15 tipos de sprites ya definidos. Estos sprites son todos de tamao 64x64 y poseen valores de transparencia que los hacen fundirse de manera excelente con el fondo. Estos sprites se indican con las constantes:

pt_shape_pixel (pixel) pt_shape_disk (disco) pt_shape_square (cuadrado) pt_shape_line (lnea) pt_shape_star (estrella) pt_shape_circle (crculo) pt_shape_ring (anillo) pt_shape_sphere (esfera) pt_shape_flare (brillo) pt_shape_spark (chispa) pt_shape_explosion (explosin) pt_shape_cloud (nube) pt_shape_smoke (humo) pt_shape_snow (nieve)

Para indicar la forma debes usar la funcin:

part_type_shape(ind,shape)

Aplica la forma tipo shape a la partcula ind.

Tambin puedes usar tu propio sprite con la funcin:

part_type_sprite(ind,sprite,animate,stretch,random)

Asigna el sprite para el tipo de particular ind. Con la

opcin animate puedes indicar si el sprite debe ser animado. Con stretch indicas si la animacin debe repetirse durante el tiempo de vida de la partcula. Y con random indicas si se escoge una subimagen aleatoria como la imagen inicial.

Una vez que hayas seeccionado el sprite para el tipo de partcula puedes elegir el tamao de ste. Un tamao de 1 significa el tamao normal del sprite. Un tipo de partcula se puede definir para que todas las partculas tengan el mismo tamao o para que tengan tamaos distintos. Tambin puedes especificar un rango de tamaos, si el tamao debe variar durante la vida de la partcula y si puede alternarse al crecer o disminuir, creando un efecto de tintineo.

part_type_size(ind,size_min,size_max,size_incr,size_wiggle)

Establece los parmetros de tamao

para el tipo de partcula. Debes indicar el tamao inicial, el tamao final, la cantidad que debe crecer en cada step (usa un valor negativo para que disminuya) y el tintineo (El valor por defecto es 1 y el tamao no cambia).

Las partculas tambin tienen una orientacin que se indica en grados en sentido antihorario. Al igual que el tamao, la orientacin puede crecer, disminuir y puede ser la misma para todas las partculas o diferente para cada una.

part_type_orientation(ind,ang_min,ang_max,ang_incr,ang_wiggle,ang_relative) Aplica la
orientacin al tipo de partcula. Debes indicar la orientacin inicial, final, el incremento o decremento en cada step, si la orientacin tintinea y si los valores son relativos al movimiento actual (1) o absolutos (0). Por ejemplo, si ponemos todos los valores a 0 menos ang_relative, que lo ponemos a 1, la orientacin de la partcula seguir el camino que sta describa.

Color y blending
Las partculas tendrn un color. Hay diferentes maneras de especificar un color para una partcula. La ms simple es especificar solamente un color. Pero tambin puedes especificar dos tres colores que se interpolarn a lo largo de la vida de la partcula. Por ejemplo, una

partcula puede crearse siendo blanca y poco a poco irse convirtiendo en negra. Otra posibilidad es indicar que el color de cada partcula debe ser diferente y elegido de un rango de colores especificado.

El color por defecto es blanco. Cuando usas un sprite con sus propios colores esto es lo que normalmente quieres y no necesitas especificar ninguna propiedad de color.

part_type_color1(ind,color1)
partcula.

Indica un slo color para la Especifica dos colores entre los que se interpolar. Ahora los colores representan el color incial, medio y final.

part_type_color2(ind,color1,color2)

part_type_color3(ind,color1,color2,color3) part_type_color_mix(ind,color1,color2)
permanecer inalterado durante la vida de la partcula.

El color ser seleccionado de una mezcla aleatoria de estos dos colores y

part_type_color_rgb(ind,rmin,rmax,gmin,gmax,bmin,bmax) part_type_color_hsv(ind,hmin,hmax,smin,smax,vmin,vmax)
especifica en modo hsv.

Se puede usar para especificar que cada

partcula tendr un color fijo pero escogido de un rango de colores que especificas en modo rgb. Igual que la anterior, pero esta vez el rango se

Adems del color, tambin puedes especificar un valor de transparencia. As puedes conseguir que las partculas desaparezcan poco a poco.

part_type_alpha1(ind,alpha1)

Aplica un nico valor de transparencia (entre 0 y 1) al tipo de partcula. Igual que la anterior, pero esta vez la transparencia en cada momento se

part_type_alpha2(ind,alpha1,alpha2)
interpola entre las dos especificadas.

part_type_alpha3(ind,alpha1,alpha2,alpha3)
momento se interpola entre las tres especificadas.

Igual que a anterior, pero esta vez la transparencia en cada

Normalmente las partculas se mezclan con el fondo igual que los sprites. Pero tambin es posible usar additive blending, controlando as la forma en que se mezclan. Esto resulta un efecto muy bueno para explosiones.

part_type_blend(ind,additive)
partcula.

Indica si se debe utilizar additive blending (1) or normal blending (0) para el tipo de

Vida y muerte
Las partculas viven durante un tiempo limitado, despus, desaparecen. La vida de las partculas se mide en steps. Puedes indicar su vida, o un rango para cada tipo de partculas. Adems, las partculas pueden crear otras partculas en cada step o cuando mueren. Vigila que el nmero de partculas total no sea demasiado elevado.

part_type_life(ind,life_min,life_max)
100 por defecto).

Establece los lmites del tiempo de vida para el tipo de partcula (Ambos son

part_type_step(ind,step_number,step_type)

Establece el nmero y tipo de partculas que deben ser generadas en

cada step para el tipo indicado de particula. Si usas un nmero negativo para step_number, por ejemplo -5, se generar una partcula cada 5 steps.

part_type_death(ind,death_number,death_type)

Establece el nmero y tipo de partculas que deben ser

generadas cuando una particular del tipo indicado llega al final de su ciclo de vida. Puedes usar valores negativos al igual que en la funcin anterior. La partcula slo crear otras partculas al llegar al final de su vida y no cuando sea destruida por un destructor (lee ms adelante).

Movimiento de las partculas


Las partculas se pueden mover durante su vida. Pueden tener velocidad inicial y direccin y cambiar durante su vida. Tambin pueden verse afectadas por la gravedad.

part_type_speed(ind,speed_min,speed_max,speed_incr,speed_wiggle)

Establece las propiedades de

velocidad para el tipo de partcula. (Todos los valores son 0 por defecto). Especificas un valor mnimo y mximo para la partcula y cuando sta sea creada se escoger un valor aleatorio entre ellos. Puedes especificar un valor negativo en speed_incr para hacer que la partcula se frene (aunque nunca llegar a tener velocidad negativa).

part_type_direction(ind,dir_min,dir_max,dir_incr,dir_wiggle) part_type_gravity(ind,grav_amount,grav_dir)
(Por defecto no hay valor de gravedad).

Establece las propiedades de

direccin para el tipo de partcula, en grados antihorarios (0-360). (Todos los valores son 0 por defecto). Establece las propiedades de gravedad para el tipo de partcula.

Sistemas de partculas
Las partculas tienen vida en sistemas de partculas. Por lo que para tener partculas en tu juego necesitas crear uno o ms sistemas de partculas. Puede haber muchos tipos diferentes de sistemas de partculas. Por ejemplo, si tu juego tiene varias pelotas y cada pelota debiera tener una cola de partculas, lo ms probable es que cada pelota tenga su sistema de partculas. La manera ms fcil para manejar los sistemas de partculas es crear uno y luego crear partculas en l, usando los tipos partculas que especificaste antes. Pero, como veremos a continuacin, los sistemas de partculas pueden contener emisores que automticamente producen partculas, atractores que las atraen y destructores que las eliminan.

Una vez que las partculas se aaden a un sistema son dibujadas y actualizadas en cada step automticamente. Para definir si las partculas se deben dibujar delante o detrs de las dems instancias, los sistemas de partculas poseen una profundidad.

Los sistemas de partculas no se eliminarn aunque reinicies el juego, para eliminarlos debes usar la funcin adecuada. As que asegrate de hacerlo cuando ya no los necesites.

Las siguientes funciones permiten manejar los sistemas de partculas:

part_system_create()

Crea un nuevo sistema de partculas. Devuelve el ndice del sistema creado. Este ndice debe emplearse

en las llamadas a las funciones siguientes para configurar las propiedades del sistema de partculas.

part_system_destroy(ind)
ahorrar espacio.

Destruye el sistema de partculas ind. Llama a esta funcin si ya no hars uso del sistema para

part_system_exists(ind) part_system_clear(ind)
atractores en l.

Devuelve si el sistema de partculas ind existe.

Devuelve el sistema ind a sus valores por defecto, removiendo todas las partculas, emisores y

part_system_draw_order(ind,oldtonew)

Establece el orden en el que el sistema dibuja las partculas. Cuando oldtonew

es true las partculas ms viejas son dibujadas primero y las nuevas se dibujan sobre ellas (valor por defecto). De otra forma las partculas ms recientes son dibujadas primero. Esto puede resultar en varios efectos diferentes.

part_system_depth(ind,depth)

Especifica la profundidad del sistema de partculas. Especifica la posicin en la que se dibuja el sistema de partculas. Si quieres dibujar el

part_system_position(ind,x,y)

sistema relativo a un objeto puedes usar sus coordenadas.

Como ya hemos visto, los sistemas de partculas se dibujan y actualizan automticamente. Pero a veces puedes no querer que esto sea as. Las siguientes funciones te permiten controlar estos aspectos:

part_system_automatic_update(ind,automatic)
(0).

Indica si el sistema debe actualizare automticamente (1) o no

part_system_automatic_draw(ind,automatic) part_system_update(ind) part_system_drawit(ind)

Indica si el sistema debe dibujarse automticamente (1) o no (0).

Esta funcin actualiza el sistema y permite a los emisores crear partculas. Puedes llamar a esta

funcin cuando no uses actualizacin automtica, o para acelerar un poco el sistema al inicio. Esta funcin dibuja el sistema de partculas si has desactivado la opcin automtica. Debes llamar a

esta funcin desde el evento draw de algn objeto.

Las siguientes funciones se encargan de las partculas de un sistema de partculas:

part_particles_create(ind,x,y,parttype,number)
(x,y) dentro del sistema.

Esta funcin crea number partculas del tipo ind en la posicin

part_particles_create_color(ind,x,y,parttype,color,number)

Esta funcin crea number partculas del

tipo ind en la posicin (x,y) dentro del sistema con el color indicado. Esto es til cuando el tipo de partcula slo usa un color o no define ninguno.

part_particles_clear(ind) part_particles_count(ind)

Esta funcin elimina todas las partculas del sistema.

Esta funcin devuelve el nmero de partculas en el sistema.

Emisores

Los emisores crean partculas. Pueden crear un flujo continuo de partculas o pueden lanzar un cierto nmero de partculas usando la funcin adecuada. Un sistema de partculas puede tener un nmero arbitrario de emisores. Un emisor tiene las siguientes propiedades:

xmin, xmax, ymin, ymax shape o o o o

indican la extensin de la regin en la cual se generan las partculas.

indica la forma de la regin. Puede tener uno de los siguientes valores:

ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line


indica la distribucin usada para general las partculas. Puede tener uno de los siguientes valores: indica una distribucin lineal, esto es que en toda la regin se tiene la misma oportunidad de

distribution o o

ps_distr_linear

que aparezca una partcula

ps_distr_gaussian
las orillas de la regin

indica una distribucin Gaussiana en la cual se generan ms partculas en el centro que en

particle type number

indica el tipo de partculas que sern generadas

indica el nmero de partculas generadas en cada step. Si es menor que 0, en cada step se generar una particular con

una probabilidad de 1/number. Por ejemplo con un valor de 5 se generar una particular en promedio una vez cada 5 steps.

Las siguientes funciones permiten establecer los emisores y permitirles crear partculas. Nota que cada una de ellas necesita el id del sistema de partculas al que pertenecen como primer argumento.

part_emitter_create(ps)

Crea un nuevo emisor en el sistema de partculas ps. Devuelve el ndice del emisor. Este ndice debe

usarse en todas las llamadas a las funciones siguientes para configurar las propiedades del emisor.

part_emitter_destroy(ps,ind)
ms del emisor para ahorrar espacio.

Destruye el emisor ind en el sistema de partculas ps. Llama a esta funcin si no necesitas

part_emitter_destroy_all(ps) part_emitter_exists(ps,ind) part_emitter_clear(ps,ind)

Destruye todos los emisores del sistema de partculas ps.

Devuelve true si el emisor ind existe en el sistema ps.

Devuelve el emisor ind a sus valores por defecto. Establece la regin y

part_emitter_region(ps,ind,xmin,xmax,ymin,ymax,shape,distribution)
distribucin del emisor.

part_emitter_burst(ps,ind,parttype,number)
sola vez) desde el emisor ind.

Emite number partculas del tipo partype en forma de estallido (una

part_emitter_stream(ps,ind,parttype,number)

Desde este momento se crearn number partculas de tipo partype

desde el emisor ind en cada step. Si indicas un nmero menor a 0 en cada step una particular sera generada con una probabilidad de 1/number. Por ejemplo con un valor de 5 se crear en promedio una particular cada 5 steps.

Atractores

Adems de los emisores, un sistema de partculas tambin puede contener atractores. Un atractor atrae a las partculas (o las aleja). Un sistema de partculas puede tener mltiples atractores. Aunque se te recomienda solo usar unos pocos porque alentarn el procesamiento de las partculas. Un atractor tiene las siguientes propiedades:

x,y

indican la posicin del atractor. indican la fuerza de atraccin del atractor. El cmo acte la fuerza sobre las partculas depende de los siguientes

force dist kind o o o

parmetros. indica la mxima distancia a la cual el atractor tiene efecto. Solo las partculas con una distancia al atractor menor que dist

sern atradas. indica el tipo de atractor. Se tienen los siguientes valores

ps_force_constant ps_force_linear

indica que la fuerza es constante independientemente de la distancia.

indica una fuerza que aumenta linealmente. A la distancia mxima la fuerza es 0 mientras

que en la posicin del atractor la fuerza tiene el valor force indicado.

ps_force_quadratic

indica que la fuerza aumenta de manera cuadrtica.

additive

indica si la fuerza se suma a la velocidad y direccin en cada step (true) o si solo se aplica a la posicin de la

particular (false). Cuando es true la particular acelerar hacia el atractor mientras que cuando sea false se mover hacia l con velocidad constante.

Las siguientes funciones definen atractores. Nota que todas necesitan como primer argumento el ndice del sistema de partculas al cual pertenecen.

part_attractor_create(ps)

Crea un nuevo atractor en el sistema de partculas ps. Devuelve el ndice del atractor. Este ndice

debe emplearse en la llamada a las funciones siguientes para configurar las propiedades del atractor.

part_attractor_destroy(ps,ind)
no necesitas el atractor para ahorrar espacio.

Destruye el atractor ind dentro del sistema de partculas ps. Llama a esta funcin si ya

part_attractor_destroy_all(ps) part_attractor_exists(ps,ind) part_attractor_clear(ps,ind)

Destruye todos los atractores que hayan sido creados en el sistema de partculas ps.

Devuelve true si el atractor ind existe dentro del sistema de partculas ps.

Devuelve los valores del atractor a sus valores por defecto. Establece a (x,y) la posicin del atractor ind. Establece las propiedades de fuerza del atractor

part_attractor_position(ps,ind,x,y)

part_attractor_force(ps,ind,force,dist,kind,aditive)
ind.

Destructores
Los destructores destruyen las partculas cuando aparecen dentro de su regin. Un sistema de partculas puede tener un nmero arbitrario de destructores. Un destructor cuenta con las siguientes propiedades:

xmin, xmax, ymin, ymax shape

indican la extensin de la regin en la cual se destruyen las partculas.

indica la forma de la regin. Puede tener uno de los valores siguientes:

o o o

ps_shape_rectangle ps_shape_ellipse ps_shape_diamond

Las funciones siguientes configuran las propiedades de los destructores. Nota que cada una de ellas necesita como primer argumento el ndice del sistema de partculas al que pertenece el destructor.

part_destroyer_create(ps)

Crea un nuevo destructor en el sistema de partculas ps. Devuelve el ndice del destructor. Este

ndice debe usarse en las llamadas a las funciones siguientes para configurar las propiedades del destructor.

part_destroyer_destroy(ps,ind) part_destroyer_destroy_all(ps) part_destroyer_exists(ps,ind) part_destroyer_clear(ps,ind)

Destruye el destructor ind dentro del sistema de partculas ps. Llama a esta funcin

cuando ya no hagas uso del destructor para ahorrar espacio. Destruye todos los destructores que hayan sido creados en el sistema de partculas ps.

Devuelve true si el destructor ind existe dentro del sistema de partculas ps.

Devuelve el destructor a sus valores por defecto. Establece la regin del destructor.

part_destroyer_region(ps,ind,xmin,xmax,ymin,ymax,shape)

Deflectores
Los deflectores desvan a las partculas cuando aparecen dentro de su regin. Un sistema de partculas puede tener un nmero arbitrario de deflectores. Un deflector tiene las siguientes propiedades:

xmin, xmax, ymin, ymax indican la extensin de la regin en la cual las partculas son desviadas. kind o o
indica el tipo de deflector. Puede tener uno de los siguientes valores:

ps_deflect_horizontal ps_deflect_vertical

refleja las partculas horizontalmente; normalmente usado para paredes verticales

refleja las partculas verticalmente; normalmente usado para paredes horizontales

friction

la cantidad de friccin como resultado de un impacto con el deflector. Entre mayor sea este valor ms se alentar la

particular al impactarse con el deflector.

Se tienen las siguientes funciones para configurar las propiedades del deflector. Nota que todas necesitan como primer argumento el ndice del sistema de partculas al cual pertenece el deflector.

part_deflector_create(ps)

Crea un nuevo deflector en el sistema de partculas ps. Devuelve el ndice del deflector. Este

ndice debe emplearse en las llamadas a las funciones siguientes para configurar las propiedades del deflector.

part_deflector_destroy(ps,ind)
necesites el deflector para ahorrar espacio.

Destruye el deflector ind del sistema de partculas ps. Llama a esta funcin cuando ya no

part_deflector_destroy_all(ps) part_deflector_exists(ps,ind) part_deflector_clear(ps,ind)

Destruye todos los deflectores que hayan sido creados en el sistema de partculas ps.

Devuelve true si el deflector ind existe dentro del sistema de partculas ps.

Devuelve el deflector a sus valores por defecto.

part_deflector_region(ps,ind,xmin,xmax,ymin,ymax) Establece la regin para el deflector.

part_deflector_kind(ps,ind,kind)

Establece el tipo de deflector. Establece la friccin del deflector.

part_deflector_friction(ps,ind,friction)

Cambiadores
Los cambiadores cambian ciertas partculas cuando aparecen dentro de su regin. Un sistema de partculas puede tener un nmero arbitrario de cambiadores. Un cambiador tiene las siguientes propiedades:

xmin, xmax, ymin, ymax shape o o o

indican la extensin de la regin en la cual las partculas son cambiadas.

indica la forma de la regin. Puede tener uno de los valores siguientes:

ps_shape_rectangle ps_shape_ellipse ps_shape_diamond


indica el tipo de partcula a ser cambiado. indica el tipo de partcula al que se cambiar.

parttype1 parttype2 kind o o o

indica el tipo del cambiador. Puede tener uno de los siguientes valores:

ps_change_motion ps_change_shape ps_change_all


nueva del nuevo tipo.

slo cambia los parmetros de movimiento de la partcula, no el color o forma ni las

propiedades de tiempo de vida slo cambia los parmetros de forma de la partcula como el tamao, el color y forma

cambia todos los parmetros, bsicamente significa que la partcula es destruida y se crea una

Las siguientes funciones permiten establecer las propiedades del cambiador. Nota que cada una de ellas necesita como primer argumento el ndice del sistema de partculas al que pertenece el cambiador.

part_changer_create(ps)

Crea un nuevo cambiador en el sistema de partculas ps. Devuelve el ndice del cambiador. Este

ndice debe usarse en las llamadas a las funciones siguientes para configurar las propiedades del cambiador.

part_changer_destroy(ps,ind)
necesitas el cambiador para ahorrar espacio.

Destruye el cambiador ind en el sistema de partculas ps. Llama a esta funcin si ya no

part_changer_destroy_all(ps) part_changer_exists(ps,ind) part_changer_clear(ps,ind)

Destruye todos los cambiadores que hayan sido creados en el sistema de partculas ps.

Devuelve true si el cambiador ind existe en el sistema de partculas ps.

Devuelve las propiedades del cambiador a sus valores por defecto. Establece la regin para el cambiador.

part_changer_region(ps,ind,xmin,xmax,ymin,ymax,shape) part_changer_types(ps,ind,parttype1,parttype2)
al que debe ser cambiado.

Establece el tipo de partcula que debe ser cambiado y el tipo

part_changer_kind(ps,ind,kind)

Establece el tipo de cambiador.

jemplo de fuegos artificiales

Aqu tienes un ejemplo de un sistema de partculas que crea unos fuegos artificiales. Hace uso de dos tipos de partculas: uno que forma el cohete y otro que forma los fuegos artificiales en si. El cohete genera las partculas de los fuegos artificiales cuando se destruye. Tambin tenemos un emisor en el sistema de partculas que emite regularmente partculas del cohete desde la parte baja de la pantalla. Para hacer que esto funcione necesitas un objeto. En su evento de creacin colocamos el siguiente cdigo que crea los tipos de partculas, un sistema de partculas y el emisor:

{ // Crear el sistema de partculas ps = part_system_create(); // the firework particles pt1 = part_type_create(); part_type_shape(pt1,pt_shape_flare); part_type_size(pt1,0.1,0.2,0,0); part_type_speed(pt1,0.5,4,0,0); part_type_direction(pt1,0,360,0,0); part_type_color1(pt1,c_red); part_type_alpha2(pt1,1,0.4); part_type_life(pt1,20,30); part_type_gravity(pt1,0.2,270); // El cohete pt2 = part_type_create(); part_type_shape(pt2,pt_shape_sphere); part_type_size(pt2,0.2,0.2,0,0); part_type_speed(pt2,10,14,0,0); part_type_direction(pt2,80,100,0,0); part_type_color2(pt2,c_white,c_gray); part_type_life(pt2,30,60); part_type_gravity(pt2,0.2,270); part_type_death(pt2,150,pt1); // Crear el emisor em = part_emitter_create(ps); part_emitter_region(ps,em,100,540,480,490,ps_shape_rectangle,ps_distr_linear); part_emitter_stream(ps,em,pt2,-4); } // Crear 1 cada 4 steps /* Crear el fuego artificial al morir*/

Listo! Asegrate de que el sistema de partculas (y tal vez los tipos de partculas) se destruyen al cambiar de room o el efecto durar para siempre.

Juegos multijugador
Esta funcionalidad slo est disponible en la versin registrada de Game Maker. Jugar contra la computadora es divertido. Pero jugar contra oponentes humanos puede serlo mucho ms. Es relativamente fcil crear este tipo de juegos porque no tienes que implementar IA compleja para un oponente manejado por la computadora. Por supuesto que puedes sentar a dos jugadores tras el mismo monitor y emplear diferentes teclas o algn otro dispositivo de entrada, pero es mucho ms interesante cuando cada jugador est detrs de su propia computadora. O an mejor, un jugador se encuentra del otro lado del ocano. El Game Maker tiene soporte multijugador. Por favor toma en cuenta que el crear juegos multijugador efectivos que se sincronicen bien y no tengan latencia es una tarea difcil. Este captulo da una breve descripcin de las posibilidades. En el sitio web hay un tutorial con ms informacin.

La ayuda sobre este tema se encuentra en las siguientes secciones:

Configurando la conexin Creando y unindose a sesiones Jugadores Datos compartidos Mensajes

Configurando la conexin
Para que dos computadoras se comuniquen necesitarn cierto protocolo de conexin. Como la mayora de los juegos, el Game Maker ofrece cuatro diferentes tipos de conexin: IPX, TCP/IP, Mdem y Serial. La conexin IPX (para ser ms precisos, se trata de un protocolo) funciona casi completamente transparente. Puede emplearse para jugar juegos con otras personas en la misma red local. Se necesita que est instalada en tu computadora para que pueda emplearse. (Si no funciona, consulta la documentacin de Windows. O ve a la opcin Red dentro del Panel de Control y agrega el protocolo IPX). TCP/IP es el protocolo de internet. Puede usarse para jugar con otros jugadores en cualquier lugar mediante internet, suponiendo que conozcas su direccin IP. Una conexin modem se realiza a travs del modem. Tienes que introducir cierta informacin del modem (una cadena de inicializacin y un nmero telefnico) para usarla. Finalmente, al usar la lnea serial (una conexin directa entre las computadoras) necesitas introducir varias opciones de puertos. Hay cuatro funciones dentro del GML que pueden emplearse para inicializar estas conexiones:

mplay_init_ipx()inicializa una conexin IPX. mplay_init_tcpip(addr)inicializa una conexin TCP/IP. addr es una cadena que indica la direccin web o IP, p. Ej.
'www.gameplay.com' o '123.123.123.12', posiblemente seguida por un nmero de puerto (p. Ej. ':12'). Slo se necesita la direccin para unirse a una sesin (ve a continuacin). En una red local no se necesitan direcciones.

mplay_init_modem(initstr,phonenr)inicializa una conexin va mdem. initstr es la cadena de inicializacin para el


mdem (puede estar vaca). phonenr es una cadena que contiene el nmero telefnico a marcar (p. Ej. '0201234567'). Slo se necesita el nmero telefnico al unirse a una sesin (ve a continuacin).

mplay_init_serial(portno,baudrate,stopbits,parity,flow) inicializa una conexin en serie. portno es el


nmero de puerto (1-4). baudrate es la velocidad a emplear en baudios (100-256K). stopbits indica el nmero de bits de parada (0 = 1 bit, 1 = 1.5 bit, 2 = 2 bits). parity indica la paridad (0=ninguna, 1=impar, 2=par, 3=mark). Y flow indica el tipo de control de flujo (0=ninguna, 1=xon/xoff, 2=rts, 3=dtr, 4=rts and dtr). La funcin devuelve si la conexin se efectu con xito. Una llamada tpica a esta funcin es mplay_init_serial(1,57600,0,0,4). Si especificas 0 al primer argumento se abre un dilogo para que el usuario pueda cambiar la configuracin manualmente. Tu juego debe llamar una de estas funciones una sola vez. Todas las funciones indican si han tenido xito (si se logra la conexin). No tiene xito si el protocolo en particular no est instalado o soportado por tu mquina. Para checar si hay una conexin exitosa disponible puedes emplear la siguiente funcin

mplay_connect_status()devuelve el estado de la conexin actual. 0=no hay conexin, 1=conexin IPX, 2=conexin TCP/IP,
3=conexin va mdem, y 4=conexin serial.

Para finalizar la conexin llama a la funcin

mplay_end() finaliza la conexin actual.

Cuando empleas una conexin TCP/IP tal vez quieras decirle a la persona con la que deseas jugar cul es la direccin ip de tu computadora. La siguiente funcin te ser de ayuda:

mplay_ipaddress()devuelve la direccin IP de tu mquina (p. Ej. '123.123.123.12') como cadena. Puedes p. Ej. mostrarla en
pantalla. Nota que esta rutina es lenta por lo que mejor no la llames a menudo.

Creando y unindose a sesiones


Cuando te conectas a una red, puede haber mltiples juegos ejecutndose en la misma red. Esos juegos reciben el nombre de sesiones. Estas diferentes sesiones pueden corresponder a juegos diferentes o al mismo. Un juego debe identificarse en la red. Afortunadamente, Game Maker hace esto por ti. Lo nico que debes saber es que cuando cambias el id del juego en la ventana de opciones esta identificacin cambia. De esta forma puedes evitar que personas con versiones anteriores de tu juego jueguen contra personas que cuentan con versiones ms recientes.

Si quieres iniciar un nuevo juego multijugador necesitas crear una nueva sesin. Para esto puedes emplear la siguiente rutina:

mplay_session_create(sesname,playnumb,playername) Crea una nueva nueva sesin en la conexin


actual. sesname es una cadena que indica el nombre de la sesin. playnumb indica el nmero mximo de jugadores permitidos para este juego (usa 0 para un nmero arbitrario de jugadores). playname es tu nombre como jugador. Indica si ha tenido xito.

Una instancia del juego debe crear la sesin. La(s) otra(s) instancia(s) del juego deben unirse a esta sesin. Esto es un poco ms complicado. Primero debes ver las sesiones disponibles y luego elegir a la que te unirs. Hay tres rutinas importantes para esto:

mplay_session_find()

Busca todas las sesiones que an aceptan jugadores y devuelve el nmero de sesiones encontradas.

mplay_session_name(numb) Devuelve el nombre de la sesin nmero numb (0 es la primer sesin). Esta rutina puede ser
llamada slo despus de haber llamado a la anterior.

mplay_session_join(numb,playername)

Con esta rutina te unes a la sesin nmero numb (0 es la primer

sesin). playername es tu nombre como jugador. Indica si ha tenido xito.

Hay una rutina ms que puede cambiar el modo de la sesin. Debe llamarse antes de crear una sesin:

mplay_session_mode(move) Indica si se mueve la sesin de host a otra computadora cuando el host actual cierre. move debe
ser true o false (valor por defecto).

Para checar el estado de la sesin actual puedes usar la siguiente funcin

mplay_session_status() Devuelve el estado de la sesin actual. 0 = no hay sesin, 1 = sesin creada, 2 = se uni a la sesin.

Un jugador puede detener una sesin empleando la siguiente rutina:

mplay_session_end() Finaliza la sesin para este jugador.

Jugadores
Cada instancia del juego que se una a una sesin es un jugador. Como se indic antes, los jugadores tienen nombres. Hay tres rutinas referentes a los jugadores:

mplay_player_find()

Busca todos los jugadores en la sesin actual y devuelve el nmero de jugadores encontrados. Devuelve el nombre del jugador nmero numb (0 es el primer jugador, el cual siempre eres t).

mplay_player_name(numb) mplay_player_id(numb)

Esta rutina puede slo ser llamada despus de haber llamado a la anterior. Devuelve el id nico del jugador nmero numb (0 es el primer jugador, el cual siempre eres t). Esta

rutina puede llamarse slo despus de haber llamado la primera. Este id es usado al enviar y recibir mensajes de otros jugadores.

Datos compartidos
La comunicacin mediante datos compartidos es probablemente la mejor forma de sincronizar el juego. Todo el proceso de comunicacin no es visible para ti. Hay un juego de 10000 valores que son comunes a todas las entidades del juego. Cada entidad puede establecer y leer valores. Game Maker se asegura de que cada entidad vea los mismos valores. Un valor puede ser un nmero real o una cadena. Slo hay dos rutinas:

mplay_data_write(ind,val) mplay_data_read(ind)

Escribe el valor val (cadena o real) en la ubicacin ind (ind entre 0 y 10000).

Devuelve el valor en la ubicacin ind (ind entre 0 y 10000). Inicialmente todos los valores son 0.

Para sincronizar la informacin en las diferentes mquinas puedes ya sea usar un modo garantizado (guaranteed mode) que asegura que el cambio llegue a la otra mquina (pero el cual es lento) o un modo no garantizado (non-guaranteed mode). Para cambiar esto usa la siguiente rutina:

mplay_data_mode(guar) Indica si se usa o no transmisin garantizada para los datos compartidos. guar debe ser true (valor por
defecto) o false.

Mensajes
El segundo mecanismo de comunicacin que el Game Maker soporta es el envo y la recepcin de mensajes. Un jugador puede enviar mensajes a un jugador o a todos los jugadores. Los jugadores pueden ver si han llegado mensajes y llevar a cabo las acciones adecuadas. Los mensajes pueden enviarse en modo garantizado en el que ests seguro de que llegarn (pero puede ser lento) o en modo no garantizado, el cual es ms rpido.

Existen las siguientes rutinas de mensajes:

mplay_message_send(player,id,val) Enva un mensaje al jugador player (ya sea un identificador o un nombre; usa 0
para enviar el mensaje a todos los jugadores). id es un entero que funciona como identificador del mensaje y val es el valor (ya sea un nmero real o una cadena). El mensaje es enviado en modo no garantizado. Si val contiene un mensaje de texto la longitud mxima del mensaje es de 30000 caracteres.

mplay_message_send_guaranteed(player,id,val) Enva un mensaje al jugador player (ya sea un identificador o un


nombre; usa 0 para enviar el mensaje a todos los jugadores). id es un entero que funciona como identificador del mensaje y val es el valor (ya sea un nmero real o una cadena). Este es un envo garantizado. Si val contiene un mensaje de texto la longitud mxima del mensaje es de 30000 caracteres.

mplay_message_receive(player) Recibe el siguiente mensaje de la cola de mensajes que lleg del


jugador player (identificador o nombre). Usa 0 para indicar mensajes de cualquier jugador. La rutina indica si de hecho hubo un nuevo mensaje. Si es as, puedes emplear las siguientes rutinas para obtener su contenido:

mplay_message_id() Devuelve el identificador del ltimo mensaje recibido. mplay_message_value() Devuelve el valor del ltimo mensaje recibido. mplay_message_player() Devuelve el jugador que envi el ltimo mensaje recibido. mplay_message_name() Devuelve el nombre del jugador que envi el ltimo mensaje recibido. mplay_message_count(player) Devuelve el nmero de mensajes restantes en la cola de espera del jugador player (usa 0
para contar todos los mensajes).

mplay_message_clear(player) Elimina todos los mensajes en la cola de espera del jugador player (usa 0 para eliminar todos
los mensajes). Debemos hacer algunas observaciones. Primero, si quieres enviar un mensaje slo a un usuario en particular, necesitars conocer el id del jugador. Como se indic antes puedes obtener este id con la funcin mplay_player_id(). Este identificador del jugador tambin es empleado al recibir mensajes de un jugador en particular. Alternativamente, puedes dar el nombre del jugador como cadena. Si varios jugadores tienen el mismo nombre, el mensaje slo llegar al primero.

En segundo lugar, podras preguntarte porqu cada mensaje tiene un entero identificador. La razn es que esto ayuda a tu aplicacin a enviar diferentes tipos de mensajes. El receptor puede checar el tipo de mensaje usando el id y llevar a cabo las acciones apropiadas. (Como no est garantizado que los mensajes lleguen, el enviar el id y el valor en mensajes diferentes causara serios problemas).

Usando DLLs

Esta funcin solo est disponible en la versin registrada de Game Maker.

En aquellos casos en los que la funcionalidad del GML no cubra tus objetivos, se pueden ampliar las posibilidades usando plug-ins (agregados o complementos). Un plug-in consiste en un archivo DLL (Dynamic Link Library Biblioteca de enlazado dinmico). En este archivo DLL se pueden definir funciones. Tales funciones pueden ser programadas en cualquier lenguaje que soporte la creacin de DLLs (p. Ej. Delphi, C, C++, etc.). Aunque se necesita contar con ciertas habilidades de programacin para poder hacerlo. Las funciones plug-in deben tener un formato especfico. Pueden tener entre 0 y 11 argumentos, cada uno de los cuales puede ser un nmero real (double en C) o una cadena terminada en un carcter nulo. (Para ms de 4 argumentos, slo se soporta argumentos reales). Estas funciones deben devolver ya sea un valor real o una cadena terminada en carcter nulo.

En Delphi se puede crear una DLL seleccionando New en el men File y luego eligiendo DLL. A continuacin tienes un ejemplo de una DLL escrita en Delphi que puede ser empleada con Game Maker. (Esto es cdigo de Delphi no GML!)

library MyDLL;

uses SysUtils, Classes; function MyMin(x,y:double):double; begin if x<y then Result := x else Result := y; end; var res : array[0..1024] of char; function DoubleString(str:PChar):PChar; cdecl; begin StrCopy(res,str); StrCat(res,str); Result := res; end; exports MyMin, DoubleString; begin end.
Esta DLL define dos funciones: MyMin toma dos argumentos reales y devuelve el de menor valor, y DoubleString que duplica una cadena. Cabe recordar que se debe ser cuidadoso con el manejo de la memoria. Esta es la razn por la que declar la cadena resultante como global. Tambin nota el uso de la convencin de llamada cdecl. Puedes emplear las convenciones de llamada cdecl o stdcall. Una vez que crees la DLL en Delphi tendrs el archivo MyDLL.DLL. Este archivo debe ser colocado en la carpeta de tu juego. (O en cualquier otro lugar donde Windows pueda encontrarlo).

cdecl;

Para hacer uso de esta DLL en Game Maker primero necesitas especificar las funciones externas que deseas emplear y qu tipo de argumentos requieren. Para ello tenemos la siguiente funcin en el GML:

external_define(dll,name,calltype,restype,argnumb,arg1type,arg2type, ) Define

una funcin

externa. dll es el nombre del archivo dll. name es el nombre de las funciones. calltype es la convencin de llamada empleada. Usa dll_cdecl o dll_stdcall. restype es el tipo del resultado. Usa ty_real o ty_string. argnumb es el nmero de argumentos (0-11). Despus, para cada argumento debes especificar su tipo. Para ello usa nuevamente ty_real o ty_string. Cuando hay ms de 4 argumentos todos ellos deben ser de tipo ty_real.

Esta funcin devuelve el id de la funcin externa que debe emplearse para llamarla. En el ejemplo de arriba, al inicio del juego usaras el siguiente cdigo GML:

{ global.mmm = external_define('MYOWN.DLL','MyMin',dll_cdecl, ty_real,2,ty_real,ty_real); global.ddd = external_define('MYOWN.DLL','DoubleString',dll_cdecl, ty_string,1,ty_string); }


Ahora en el momento que necesites llamar a las funciones, usas la siguiente funcin:

external_call(id,arg1,arg2,)

Llama a la funcin externa con el id y los argumentos dados. Necesitas proporcionar el

nmero correcto de argumentos del tipo correcto (real o string). La funcin devuelve el resultado de la funcin externa.

As, por ejemplo, escribiras:

{ aaa = external_call(global.mmm,x,y); sss = external_call(global.ddd,'Hello'); }


Si ya no utilizars la DLL, lo mejor sera liberarla.

external_free(dll)

Libera la DLL con el nombre indicado. Esto es particularmente necesario si el juego debiera remover la DLL.

Mientras la DLL no haya sido liberada, no puede ser removida. Lo mejor es realizar esto p. Ej. en el evento game end.

Ahora te preguntars cmo hacer una funcin en una DLL que haga algo en el juego. Por ejemplo, podras querer una DLL que agregue instancias de objetos a tu juego. La forma ms fcil es dejar que la funcin DLL devuelva una cadena que contenga una pieza de cdigo GML. Esta cadena que contiene una pieza de GML puede ser ejecutada usando la siguiente funcin del GML

execute_string(str)

Ejecuta la pieza de cdigo en la cadena str.

Alternativamente puedes dejar que la DLL cree un archivo con un script que puede ser ejecutado (esta funcin tambin puede ser empleada para luego modificar el comportamiento del juego).

execute_file(fname) {

Ejecuta el cdigo en el archivo fname.

Ahora puedes llamar una funcin externa y ejecutar la cadena resultante, por ejemplo:

ccc = external_call(global.ddd,x,y);

execute_string(ccc); }
En algunos casos especiales pudieras necesitar el handle de ventana (identificador de Windows) de la ventana principal del juego. Este puede obtenerse con la siguiente funcin y luego ser pasado a la DLL:

window_handle()

Devuelve el handle de la ventana principal.

Nota: las DLLs no pueden ser empleadas en modo seguro. El empleo de DLLs externas es una funcin extremadamente poderosa. Pero por favor haz uso de ellas slo si sabes lo que ests haciendo.

Grficos 3D

Esta funcin slo est disponible en la versin registrada de Game Maker.

Game Maker es un programa destinado para crear juegos en 2 dimensiones e isomtricos. Sin embargo existen algunas funciones para crear grficos tridimensionales. Pero antes que inicies con esto hay un par de cosas que debes entender.

La funcionalidad 3D en Game Maker est limitada a la parte grfica. No hay ms soporte para otras funciones 3D. Una vez que comiences a usar grficos 3D posiblemente tendrs problemas con otros aspectos de Game Maker, como las vistas, orden de profundidad, etc. La funcionalidad es limitada y tiene baja prioridad de ser extendida. As que no esperes soporte para objetos de modelos 3D, etc.

Cuando usas la funcionalidad 3D, son varias cosas las que ya no pueden ser usadas. o Ya no podrs usar backgrounds ni foregrounds en tus rooms (La razn es que son usados como mosaicos para llenar la imagen pero con proyecciones de perspectiva esto ya no funciona correctamente).

Ya no podrs usar la posicin del ratn. El ratn no ser transformado a las coordenadas 3D. An puedes obtener la posicin del ratn en la pantalla (en la vista) pero tendrs que hacer clculos con esto por ti mismo (o no usar el ratn del todo).

o o

Ya no podrs usar tiles. Lo ms posible es que los tiles ya no encajen correctamente. La comprobacin de colisiones todava usa las posiciones 2-d de las instancias en el cuarto. As que no hay deteccin de colisiones en 3D. En ocasiones an podrs usar esto (si utilizas el cuarto como una representacin de un mundo plano (peje. para carreras o juegos FPS) pero en otras circunstancias tendrs que hacer las cosas por ti mismo.

Todas las funciones 3D son a travs de cdigo. Debes estar algo familiarizado con el lenguaje GML. Adems debes entender bastante acerca de como funciona Game Maker de lo contrario te meters en dificultades.

Necesitas tener conocimiento bsico acerca de grficos 3D. En particular usar trminos como proyecciones de perspectiva, hidden surface removal, iluminacin, y niebla, sin mucha explicacin.

No hay modelado 3D en Game Maker. Adems que no planeo aadir soporte para cargar modelos 3D. Es preciso que trabajes con cuidado para mantener una velocidad razonable. Adems, esto no est realmente optimizado en velocidad.

Si todo esto no te desanim, contina leyendo.

Esta seccin se divide en los siguientes temas: Rumbo al modo 3D Dibujo fcil Dibujando polgonos en 3D Dibujando formas bsicas Viendo el mundo Transformaciones Niebla Iluminacin Creando modelos Palabras finales

Rumbo al modo 3D
Si deseas usar el modo 3D antes necesitas poner Game Maker en modo 3D. Despus puedes regresar al modo 2D si lo deseas. Las siguientes dos funciones existen para ello.

d3d_start ( ) d3d_end ( )

Inicia el modo 3D.

Detiene el modo 3D.

Nota que todas las funciones relacionadas con 3D inician con d3d_.

Iniciar el modo 3D dar resultado a los siguientes cambios. Primero que nada hidden surface removal es cambiado a encendido (usando un z-buffer de 16 bits). Esto significa que por cada pxel en la pantalla slo el dibujado con el valor z menor (= al valor depth, profundidad) es mostrado. Si las instancias tienen la misma profundidad es confuso lo que pasar y puedes obtener efectos feos. Asegrate que las instancias que pueden sobreponerse no tengan la misma profundidad!

En segundo lugar, la proyeccin ortogrfica es remplazada por una perspectiva. Esto significa lo siguiente. Normalmente el tamao de las instancias en la pantalla es independiente de su profundidad. Con una proyeccin en perspectiva las instancias que poseen mayor profundidad parecern ms pequeas. Cuando la profundidad es 0 al viejo tamao (a menos que cambies la proyeccin; velo mas adelante). El punto de vista para la cmara es puesta a una distancia sobre el cuarto. (Esta distancia es igual al ancho del cuarto; la cual da una proyeccin por defecto razonable.) Slo las instancias que estn frente la cmara son dibujadas. As que no uses instancias con una profundidad menor a 0 (o al menos no menor que w donde w (width) es el ancho del cuarto o la vista).

En tercer lugar, la coordenada-y vertical es invertida. Mientras que la posicin (0,0) est en la esquina superior-izquierda de la vista, en el modo 3D la posicin (0,0) est en la posicin inferior-izquierda, lo cual es normal para las vistas 3-dimensionales.

En realidad puedes cambiar hidden surface removal (eliminar las superficies ocultas) y la proyeccin de perspectiva encendido o apagado usando las siguientes funciones.

d3d_set_hidden (habilita)

Habilita eliminar superficie oculta (true) o la deshabilita (false). Habilita el uso de una proyeccin en perspectiva (true) o la deshabilita

d3d_set_perspective(habilita)
(false).

Dibujo fcil
Una vez que haz cambiado al modo 3D puedes usar Game Maker como sueles hacerlo (excepto por las remarcas hechas al principio). Slo los objetos aparecern en diferentes tamaos basados en profundidad. Incluso puedes usar vistas. Una funcin adicional puede ser usada. Si dibujas cierto nmero de cosas en una pieza de cdigo quiz quieras cambiar el valor de profundidad entre las primitivas que dibujes. Para esto usa:

d3d_set_depth(profundidad)

Establece la profundidad usada para dibujar.

Nota que al momento en que una nueva instancia es dibujada la profundidad es devuelta al valor original de esa instancia.

Dibujando polgonos en 3D
El problema de dibujar de la vieja manera es que un sprite o polgono siempre se encuentra en un plano-xy, esto es, todas las esquinas tienen la misma profundidad. Para 3D verdadero debes ser capaz de tener vrtices a diferentes profundidades. A partir de

este momento hablaremos de la coordenada-z en vez de la profundidad (depth). As que debemos especificar coordenadas como (x,y,z). Para esto existe una versin especial de funciones de dibujado avanzado:

d3d_primitive_begin(tipo) d3d_vertex(x,y,z)
anterioridad.

Inicia una primitiva 3D de un tipo indicado:

pr_pointlist,

pr_linelist,pr_linestrip,pr_trianglelist,pr_trianglestrip o pr_trianglefan.
Aade el vrtice (x,y,z) a la primitiva, usando color y valor alfa especificados con

d3d_vertex_color(x,y,z,col,alpha) d3d_primitive_end( )

Aade el vrtice (x,y,z) a la primitiva, con su propio color y valor

alpha. Esto te permite crear primitivas con un suave cambio de color y valores alfa. Finaliza la descripcin de la primitiva. Esta funcin realmente la dibuja.

Por ejemplo, para dibujar un tetraedro (pirmide de tres lados) situada en el plano z=0 con su punta en z = 200, puedes usar el siguiente cdigo:

{ d3d_primitive_begin(pr_trianglelist); d3d_vertex(100,100,0); d3d_vertex(100,200,0); d3d_vertex(150,150,200); d3d_vertex(100,200,0); d3d_vertex(200,200,0); d3d_vertex(150,150,200); d3d_vertex(200,200,0); d3d_vertex(100,100,0); d3d_vertex(150,150,200); d3d_vertex(100,100,0); d3d_vertex(100,200,0); d3d_vertex(200,200,0); d3d_primitive_end(); }

Ahora que si quieres usar esto, lo ms posible es que slo vers un triangulo en la pantalla porque la punta del tetraedro estar en frente del punto de vista. Aparte, usando slo un color, sera difcil de ver las diferentes caras. Adelante veremos maneras de cambiar el punto de vista. Asignando colores lo cual puede hacerse como antes aadiendo la funcin draw_set_color(col) entre las vrtices.

Tambin puedes usar polgonos texturizados en 3D. Funciona de la misma manera como est descrito en las funciones de dibujado avanzado en la documentacin. Pero en esta ocasin necesitas variantes 3D de las funciones bsicas. De una cosa te debes dar

cuenta. En una textura la posicin (0,0) es la esquina superior-izquierda. Pero en ocasiones, cuando se usan proyecciones (como se indica adelante), la esquina inferior-izquierda es (0,0). En ese caso necesitas girar la textura verticalmente.

d3d_primitive_begin_texture(tipo,texid)
indicada.

Inicia una primitiva 3D del tipo indicado con la textura

d3d_vertex_texture(x,y,z,xtex,ytex)

Aade el vrtice (x,y,z) a la primitiva con posicin

(xtext,ytext) en la textura, mezclando con el color y valor alpha especificados anteriormente.

d3d_vertex_texture_color(x,y,z,xtex,ytex,col,alpha) d3d_primitive_end()

Aade el vrtice (x,y,z) a la

primitiva con posicin (xtex,ytex) en la textura, mezclando con su propio color y valor alpha. Finaliza la descripcin de la primitiva. Esta funcin en realidad la dibuja.

As que, por ejemplo puedes usar el siguiente cdigo para dibujar una imagen de fondo que desaparece a la distancia

{ var ttt; ttt = background_get_texture(back); d3d_primitive_begin_texture(pr_trianglefan,ttt); d3d_vertex_texture(0,480,0,0,0); d3d_vertex_texture(640,480,0,1,0); d3d_vertex_texture(640,480,1000,1,1); d3d_vertex_texture(0,480,1000,0,1); d3d_primitive_end(); }

Un tringulo tiene una cara frontal y una trasera. La cara frontal est definida para ser el lado donde los vrtices son definidos en orden contrario al reloj. Normalmente ambos lados son dibujados. Pero si haces una forma cerrada esto es intil porque el lado trasero del tringulo nunca puede ser visto. En este caso puedes encender backface culling. Esto salva cerca de la mitad la cantidad del tiempo dibujando pero te deja con la tarea de definir tus polgonos de la manera correcta. Existe la siguiente funcin:

d3d_set_culling(separar)

Indica iniciar backface culling (true) o detener backface culling (false).

Dibujando formas bsicas


Existen varias funciones para dibujar formas bsicas, como bloques y paredes. Nota que estas formas tambin funcionan correctamente con backface culling.

d3d_draw_block(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat)

Dibuja un bloque del color

actual con las esquinas opuestas indicadas usando la textura indicada. Usa -1 para no usar una textura. cara.

hrepeatindica que tan seguido la textura debe ser repetida a travs del borde horizontal de cada

vrepeat hace lo mismo con el borde vertical.

d3d_draw_cylinder(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat,cerrado,steps)
Dibuja un cilindro vertical usando el color actual en la caja de colisin indicada usando la textura indicada. Usa -1 para no usar una textura. cara.

hrepeat

indica que tan seguido la textura debe ser repetida a travs del borde horizontal de cada

vrepeat

hace lo mismo con el borde vertical.

closed

indica si se debe cerrar la tapa y fondo del cilindro.

steps indica cuantos pasos rotacionales deben ser tomados. Un valor tpico es 24.

d3d_draw_wall(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat)

Dibuja una pared vertical en

el color actual con las puntas dadas usando la textura indicada. Usa -1 para no usar una textura. tan seguido la textura debe ser repetida a travs del borde horizontal de cada cara. borde vertical.

hrepeat indica que


hace lo mismo con el

vrepeat

d3d_draw_floor(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat)
en el color actual con las esquinas dadas usando la textura indicada. ser repetida a travs del borde horizontal de cada cara.

Dibuja un piso (inclinado)

hrepeat

indica que tan seguido la textura debe

vrepeat

hace lo mismo con el borde vertical.

La siguiente pieza de cdigo dibuja dos bloques:

{ var ttt; ttt = background_get_texture(back); d3d_draw_block(20,20,20,80,40,200,ttt,1,1); d3d_draw_block(200,300,-10,240,340,100,ttt,1,1); }

Viendo el mundo
Por defecto tu vista es a travs del eje-z negativo hacia el medio del cuarto. En ocasiones en juegos 3D deseas poder cambiar la manera en que miras al mundo. Por ejemplo, en un juego de disparos en primera persona probablemente deseas tener la cmara mirando desde una posicin un poco sobre el plano-xy a lo largo del plano-xy. En trminos grficos ests estableciendo la proyeccin correcta. Para cambiar la manera en que miras, las siguientes funciones existen.

d3d_set_projection(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup)
mirar en el mundo. Especificas el punto desde dnde mirar, el punto a mirar y el rumbo ascendente.

Defines como

Esta funcin requiere alguna explicacin. Para establecer la proyeccin primero necesitas la posicin desde la cual miras. Esto est indicado por los parmetros (xfrom,yfrom,zfrom). En seguida debes especificar la direccin que miras. Esto se hace dando un segundo punto al cual mirar. Este es el punto (xto,yto,zto). Finalmente, incluso puedes rotar la cmara alrededor de la lnea del punto de vista al punto observado. Para especificar esto debemos tener un rumbo ascendente, esto es, la direccin ascendente en la cmara. Esto es dado por los ltimos tres parmetros (xup,yup,zup). Permtanme dar un ejemplo. Para mirar a travs del plano-xy como en un primera persona puedes usar

{ d3d_set_projection(100,100,10,200,100,10,0,0,1); }

As miras desde el punto (100,100) y 10 sobre el plano en direccin de (200,100). Los puntos del vector up es la direccin-z que requiere. Para hacer esto ligeramente ms complicado, asumamos que tienes una instancia en tu cuarto que especifica la posicin de la cmara. Esta tendr una posicin (x,y) actual y una direccin (y quiz incluso una velocidad). Ahora puedes especificar esto como tu cmara usando el siguiente cdigo:

{ with (obj_camera) d3d_set_projection(x,y,10, x+cos(direction*pi/180),y-sin(direction*pi/180),10, 0,0,1); }

Esto puede lucir algo complicado. Miramos desde la posicin de la cmara (x,y), 10 sobre el piso. Para determinar un punto en la direccin correcta necesitamos hacer algo de aritmtica. Este punto est indicado por los tres siguientes parmetros. Finalmente usamos el vector up como antes.

Una observacin importante! Cuando Game Maker comienza a dibujar un cuarto este pondr el punto de vista de regreso a la posicin por defecto. As que la primera cosa que necesitas hacer cuando dibuja la escena es poner la proyeccin que desees. Esto debe hacerse en un evento Draw!

Existe tambin una versin extendida de la funcin anterior:

d3d_set_projection_ext(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,angle,a spect,znear,zfar)
Una versin extendida de esta funcin en la cual adems especificas el ngulo definiendo el

campo de vista, el radio de aspecto entre el tamao vertical y horizontal de la vista, y los planos cercanos y lejanos de recorte.

Los parmetros adicionales trabajan como sigue. Si especificaste la posicin de la cmara, el punto a mirar, y el vector up, puedes todava cambiar qu tan unidos estn los lentes de la cmara. Esto es conocido como el campo de vista. Un valor razonable es 45 grados y esto es el valor por defecto tomado. Pero puedes cambiar esto si gustas. Despus puedes especificar la relacin de aspecto entre la proyeccin horizontal y vertical. Normalmente quieres usar el mismo como la radio de aspecto del cuarto o la vista, p.ej. 640/480. Finalmente puedes indicar los planos de recorte. Los objetos que son ms cercanos que

znear

a la cmara no son

dibujados. Similar para objetos ms lejos que zfar. Puede ser importante poner estos parmetros a valores razonables porque ellos tambin influyen en la precisin de las comparaciones de z. Si usted hace el rango demasiado grande la precisin empeora. Por defecto usamos 1 y 32000. znear debe ser ms grande que 0!

A veces necesitas temporalmente una proyeccin normal ortogrfica como la usada cuando no hay 3D. Por ejemplo, cuando quieres dibujar alguna capa. Para esto puedes usar la funcin siguiente:

d3d_set_projection_ortho(x,y,w,h,ngulo)
cuarto, girando sobre el ngulo indicado.

Pone una proyeccin normal ortogrfica del rea indicada en el

Un uso estndar para esto es dibujar una capa para p.ej. mostrar el puntaje u otros aspectos. Para hacer esto ponemos una proyeccin ortogrfica. Tambin debemos desactivar hidden surface removal temporalmente porque queremos que la informacin sea dibujada independientemente del valor de profundidad actual. El ejemplo siguiente muestra como crear una capa con el puntaje.

{ draw_set_color(c_black); d3d_set_projection_ortho(0,0,room_width,room_height,0); d3d_set_hidden(false); draw_text(10,10,'Score: ' + string(score)); d3d_set_hidden(true); }

Transformaciones
Las transformaciones te permiten cambiar el lugar donde las cosas son dibujadas en el mundo. Por ejemplo, la funcin para dibujar bloques slo puede dibujar bloques paralelos de eje. Por primera opcin una transformacin de rotacin puedes crear bloques girados. Tambin los sprites siempre son dibujados paralelos al plano-xy. Estableciendo una transformacin puedes cambiar esto. Hay dos tipos de funciones: las funciones que ponen la transformacin y las funciones que aaden transformaciones.

d3d_transform_set_identity ()

Pone la transformacin a la identidad (ninguna transformacin). Pone la transformacin a una conversin sobre el

d3d_transform_set_translation(xt,yt,zt)
vector indicado.

d3d_transform_set_scaling(xs,ys,zs)
indicadas.

Pone la transformacin a un escalamiento con las cantidades

d3d_transform_set_rotation_x(ngulo)
con la cantidad indicada.

Pone la transformacin a una rotacin alrededor del eje-x

d3d_transform_set_rotation_y(ngulo)
con la cantidad indicada.

Pone la transformacin a una rotacin alrededor del eje-y

d3d_transform_set_rotation_z(ngulo)
con la cantidad indicada.

Pone la transformacin a una rotacin alrededor del eje-z

d3d_transform_set_rotation_axis(xa,ya,za,ngulo)
alrededor del eje indicado por el vector con la cantidad indicada.

Pone la transformacin a una rotacin

d3d_transform_add_translation(xt,yt,zt) d3d_transform_add_scaling(xs,ys,zs) d3d_transform_add_rotation_x(ngulo)


indicada.

Aade una transformacin sobre vector indicado.

Aade un escalamiento con las cantidades indicadas. Aade una rotacin alrededor del eje-x con la cantidad

d3d_transform_add_rotation_y(ngulo)
indicada.

Aade una rotacin alrededor del eje-y con la cantidad

d3d_transform_add_rotation_z(ngulo)
indicada.

Aade una rotacin alrededor del eje-z con la cantidad

d3d_transform_add_rotation_axis(xa,ya,za,ngulo)
indicado por el vector con la cantidad indicada.

Aade una rotacin alrededor del eje

Comprende que la rotacin y el escalamiento son con respecto al origen del mundo, no al respecto al objeto que debe ser dibujado. Si el objeto no est en el origen este tambin se mover a un lugar diferente, que no es lo que queremos. As para p.ej. hacer girar un objeto sobre su propio eje-x, primero debemos trasladar al origen, despus hacerlo girar, y finalmente trasladarlo de regreso a su posicin. Esto es para qu son las funciones de aadir transformaciones. Los ejemplos siguientes podran explicar esto mejor. Asumiendo que tenemos un sprite spr que queremos dibujar en la posicin (100,100,10). Podemos usar el cdigo siguiente para hacer esto

{ d3d_transform_set_translation(100,100,10); draw_sprite(spr,0,0,0); d3d_transform_set_identity(); }

Nota que porque usamos una transformacin ahora deberamos dibujar el sprite en la posicin (0,0). (Esto asume que la instancia actual tiene una profundidad de 0! Si no estas seguro, primero pon la profundidad.) Si usramos esto en nuestro tirador en primera persona no veramos el sprite. La razn es que es todava paralelo al plano-xy. Queremos hacerlo girar ms de 90 grados a lo largo

del eje-x (o el eje-y). Entonces tenemos que aadir una rotacin. Recuerda el orden: primero debemos hacer girar el sprite y luego transformarlo. Entonces podemos usar el cdigo siguiente.

{ d3d_transform_set_identity(); d3d_transform_add_rotation_x(90); d3d_transform_add_translation(100,100,10); draw_sprite(spr,0,0,0); d3d_transform_set_identity(); }

En ocasiones quieres guardar temporalmente la transformacin actual, por ejemplo para aadir una transformacin adicional y luego restaurar a la anterior (esto a menudo pasa dibujando modelos jerrquicos). Para este fin puedes empujar la transformacin actual sobre un montn y luego sacarlo del montn para hacerlo la transformacin actual de nuevo. Las funciones siguientes existen para esto:

d3d_transform_stack_clear() d3d_transform_stack_empty() d3d_transform_stack_push()

Limpia el montn de transformaciones. Devuelve si el montn de transformacin est vaco.

Empuja la transformacin actual sobre el montn. Devuelve si hay espacio

sobre el montn para empujarlo all (si olvidas sacar la transformacin en algn momento te quedars sin espacio en el montn).

d3d_transform_stack_pop()
haba una transformacin sobre el montn.

Saca la transformacin superior del montn y la hace la actual. Devuelve si

d3d_transform_stack_top()

Hace a la transformacin superior la actual, pero no lo quita del montn.

Devuelve si haba tras una transformacin sobre el montn.

d3d_transform_stack_discard()

Quita la transformacin superior del montn, pero no lo hace la actual.

Vueltas si haba tras una transformacin en el montn.

La utilizacin de la transformacin es un mecanismo poderoso. Pero s cuidadoso y siempre restaura la transformacin a la identidad una vez que terminaste.

Niebla
La niebla puede ser usada en juegos de 3D para hacer que los objetos a la distancia luzcan borrosos o incluso desaparecer. Esto ayuda en la creacin de la atmsfera y hace posible el no dibujar los objetos que estn a lo lejos. Para habilitar o deshabilitar la niebla usa la funcin siguiente:

d3d_set_fog(habilitar,color,principio,fin)

Habilita o deshabilita el empleo de niebla. color

indica el color de la niebla. principio indica la distancia a la cual la niebla debe comenzar. fin indica la distancia a la cual la niebla es mxima y nada puede ser visto ms all.

Iluminacin
Las escenas que dibujas con las funciones anteriores parecen bastante planas porque no hay luz alguna. El color si las caras son iguales, independiente de su orientacin. Para crear escenas que luzcan ms realistas debes permitir la iluminacin y poner las luces en los sitios correctos. La creacin de escenas correctamente alumbradas no es fcil pero el efecto es muy bueno.

Para permitir la iluminacin puedes usar la funcin siguiente;

d3d_set_lighting(habilitar)

Habilita o inhabilita el uso de iluminacin.

Usando la iluminacin, para cada vrtice de un polgono el color es determinado. Despus, el color de los pxeles internos est basado en el color de estos vrtices. Hay dos modos que puede ser hecho: El polgono entero consigue el mismo color, o el color suavemente es interpolado sobre el polgono. Por defecto smooth shading es usado. Esto puede ser cambiado usando la funcin siguiente:

d3d_set_shading(smooth)

Establece si usar smooth shading o no.

Para usar la iluminacin obviamente tienes que definir luces. Dos diferentes luces existen: luces direccionales (como el sol), y luces posicinales. La luz tiene un color. (Slo soportamos la luz difusa, no la reflexin especular.) Las funciones siguientes existen para definir y usar luces:

d3d_light_define_direction(ind,dx,dy,dz,col)

Define una luz dirigida. ind es el ndice de la

luz (usa un pequeo nmero positivo). (dx,dy,dz) es la direccin de la luz. col es el color de la luz (a menudo quieres usar c_white. Esta funcin no enciende la luz.

d3d_light_define_point(ind,x,y,z,rango,col)

Define una luz de punto. ind es el ndice de la luz

(usa un pequeo nmero positivo). (x,y,z) es la posicin de la luz. rango indica qu lejos brilla la luz. La intensidad de la luz se disminuir sobre este rango. col es el color de la luz. Esta funcin no enciende la luz.

d3d_light_enable(ind,permitir)

Habilita (true) o deshabilita (false) la luz nmero ind.

La manera en que un objeto refleja la luz depende del ngulo entre la direccin de la luz y el normal de la superficie, es decir el vector que seala lejos de la superficie. De ah, para crear objetos iluminados no slo tienes que proporcionar la posicin de los vrtices, sino tambin sus normales. Para estas cuatro funciones adicionales estn disponibles para definir los vrtices de primitivas:

d3d_vertex_normal(x,y,z,nx,ny,nz)
(nx,ny,nz).

Aade el vrtice (x,y,z) a la primitiva, con vector normal

d3d_vertex_normal_color(x,y,z,nx,ny,nz,col,alpha)
con vector normal (nx,ny,nz), y con su propio color y valor alpha.

Aade el vrtice (x,y,z) a la primitiva,

d3d_vertex_normal_texture(x,y,z,nx,ny,nz,xtex,ytex)

Aade el vrtice (x,y) a la

primitiva, con vector normal (nx,ny,nz), y con la posicin (xtex,ytex) en la textura, mezclndose con el color y valor alpha establecidos antes.

d3d_vertex_normal_texture_color(x,y,z,nx,ny,nz,xtex,ytex,col,alpha)

Aade

el vrtice (x,y) a la primitiva, con vector normal (nx,ny,nz), y con la posicin (xtex,ytex) en la textura, mezclndose con su propio color y valor alpha.

Note que para las formas bsicas que puedes dibujar las normales automticamente son puestas correctamente.

Creando modelos
Cuando necesitas dibujar modelos complejos es muy costoso llamar a todas las funciones diferentes una y otra vez en cada step. Para evitarte esto, puedes crear modelos. Un modelo consiste de un nmero de primitivas y formas de dibujo. Una vez que creas un modelo puedes dibujarlo en diferentes lugares y en diferenes posiciones con una simple llamada a ese modelo.

Antes de listar las funciones de modelos es importante resaltar un aspecto: el manejo de texturas. Como ya se ha explicado antes, las texturas se toman de sprites y backgrounds. Los ndices de las texturas pueden ser diferentes en cada momento, por lo que los modelos no contienen informacin sobre ellas. Slo cuando dibujas un modelo debes especificar informacin sobre la textura. De esta forma, slo puedes usar una textura en cada modelo. Si necesitas usar ms texturas puedes combinar varias (y tener mucho cuidado con las coordenadas de cada una) o usar mltiples modelos. La ventaja de esto es que puedes dibujar sencillamente el mismo modelo con diferentes texturas.

Para crear, cargar, guardar y dibujar modelos se usan las siguientes funciones:

d3d_model_create()

Crea un nuevo modelo y devuelve su ndice, que debe ser usado en las dems funciones. Destruye el modelo especificado, liberando memoria.

d3d_model_destroy(ind) d3d_model_clear(ind)

Limpia el modelo especificado, eliminando todas sus primitivas. Salva el modelo ind al archivo especificado en fname. Carga el modelo desde el archivo especificado. Dibuja el modelo en la posicin (x,y,z). texid es la textura que se aplicar al

d3d_model_save(ind,fname) d3d_model_load(ind,fname)

d3d_model_draw(ind,x,y,z,texid)

modelo. Usa -1 para no usar texturas. Si quieres rotar o escalar el modelo usa las rutinas de transformacin descritas en el apartado de Transformaciones.

Para cada primitiva existe una funcin equivalente que la aade a un modelo. Estas funciones se usan igual que las que ya hemos visto en los captulos anteriores, slo que en lugar de especificar una textura ahora daremos el ndice del modelo.

d3d_model_primitive_begin(ind,kind)
kind:

Aade al modelo una primitiva 3D del tipo siguiente indicado en

pr_pointlist, pr_linelist, pr_linestrip, pr_trianglelist,

pr_trianglestrip opr_trianglefan. d3d_model_vertex(ind,x,y,z)


Aade el vrtice (x,y,z) al modelo. Aade el vrtice (x,y,z) al modelo con su propio color y valor de

d3d_model_vertex_color(ind,x,y,z,col,alpha)
transparencia.

d3d_model_vertex_texture(ind,x,y,z,xtex,ytex)
en la textura.

Aade el vrtice (x,y,z) al modelo con la posicin (xtex,ytex)

d3d_model_vertex_texture_color(ind,x,y,z,xtex,ytex,col,alpha)
con valores de textura y color.

Aade el vrtice (x,y,z) al modelo

d3d_model_vertex_normal(ind,x,y,z,nx,ny,nz)

Aade el vrtice (x,y,z) al modelo con el vector normal (nx,ny,nz). Aade el vrtice (x,y,z) al modelo con

d3d_model_vertex_normal_color(ind,x,y,z,nx,ny,nz,col,alpha)
el vector normal (nx,ny,nz) y sus propios valores de color y transparencia.

d3d_model_vertex_normal_texture(ind,x,y,z,nx,ny,nz,xtex,ytex)
con el vector normal (nx,ny,nz) y coordenadas de textura (xtex, ytex).

Aade el vrtice (x,y,z) al modelo

d3d_model_vertex_normal_texture_color(ind,x,y,z,nx,ny,nz,xtex,ytex,col,alpha)
vrtice (x,y,z) al modelo con el vector normal (nx,ny,nz) con valores de color y textura.

Aade el

d3d_model_primitive_end(ind)

Finaliza la descripcin de la primitiva en el modelo.

Adems de primitivas tambin puedes aadir formas al modelo. Las funciones son anlogas a las ya vistas usando el ndice del modelo en lugar del de la textura:

d3d_model_block(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat)

Aade un bloque al modelo. Aade un cilindro al

d3d_model_cylinder(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps)
modelo.

d3d_model_cone(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps) d3d_model_ellipsoid(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,steps)
modelo.

Aade un cono al modelo.

Aade una elipsoide al

d3d_model_wall(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat)

Aade una pared al modelo. Aade un suelo al modelo.

d3d_model_floor(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat)

El uso de modelos puede aumentar considerablemente la velocidad de los grficos en los juegos 3D, as que deberas usarlo siempre que sea posible.

Palabras finales

Las funciones de 3D en Game Maker pueden ser usadas hacer algunos juegos agradables en 3D. Pero estas son limitadas en funcionalidad y todava te dejan bastante trabajo. No esperes poder hacer tu propio Quake con esto. Game Makeres y sigue siendo sobre todo un paquete para hacer juegos de 2 dimensiones.

Apndices
Glosario Mensajes de error Crditos y agradecimientos

Glosario

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
alpha Transparencia. Es un parmetro que se utiliza en las funciones de dibujo avanzadas y que indica el nivel de transparencia
de lo que se est dibujando: 0 es totalmente transparente y 1 es totalmente opaco. Los valores intermedios se usan para dibujar elementos parcialmente transparentes.

argumento Los argumentos son los datos que se le pasan a una funcin para que sta opere con ellos. Por ejemplo, una
funcin que sume dos nmeros necesitar que le digas que nmeros tiene que sumar. Esos nmeros son losargumentos de la funcin.

B
background Fondo. Es la imagen que se pone de fondo al room para que sea el escenario. Puedes agregar varias imgenes
distintas y hacer que cada una se mueva a diferente velocidad cuando el personaje avance, haciendo que las imgenes ms cercanas se muevan ms rpido que las ms lejanas. As consigues un efecto de profundidad muy vistoso. Esta tcnica se llama scroll parallax.

blending Ver image blending. bmp Es un tipo de archivo de grficos de alta calidad (mapa de bits). Slo es aconsejable utilizar bmps para fondos
transparentes.

boolean Booleano. Es un tipo de variable que slo puede tener dos valores: true o false. Es decir, si una variable booleana no
es true entonces es false.

D
depth Profundidad. Es una propiedad de las instancias que sirve para decidir cul debe dibujarse por encima de las dems
cuando chocan, cul se sita primero en el room...Puede ser positiva, negativa 0 y cuanto menor sea ms al frente se situar la instancia.

F
false Falso.
En Game Maker false=0, es decir, es lo mismo poner false que poner 0.

fps Frames por segundo. No es lo mismo que la room speed. La room speed es el valor ideal al que queremos que el juego
se actualice. Sin embargo, si ponemos muchas acciones en el evento step el juego puede ralentizarse, o si usamos unos sprites de mucha calidad puede que el juego necesite mucha memoria...esto provoca que el juego se ralentice y en lugar de dibujar todos los frames que queremos en cada segundo dibuje menos. Los fps son la medida real de la velocidad del juego en cada segundo. Te interesar que los fps estn siempre lo ms cercano posible a la room speed.

frame Para generar la ilusin de animacin, lo que se hace es dibujar la pantalla muchas veces (por ejemplo 60 veces por
segundo) haciendo que su contenido cambie poco a poco. As, al ver esos cambios de manera seguida parece que la imagen se est moviendo. Cada instante en el que se dibuja la pantalla se denomina frame.

frame rate Es la velocidad con la que se pasa de un frame a otro. Cuanto mayor sea, ms fluidas se vern las animaciones
en la pantalla, pero se requerir ms potencia.

G
gif Es un tipo de archivo de grficos comprimido y animado. Ideal para sprites.

H
height Altura. Es un argumento muy comn en las funciones de grficos.

highscore El marcador ms alto, el rcord de puntuacin obtenido en el juego. Puedes mostrar una lista con las
puntuaciones ms altas (highscore list) con la accin correspondiente.

I
image blending
Mezclado de imgenes. Cuando dos imgenes se superponen (por ejemplo, cuando chocan dos sprites) el programa debe decidir qu es lo que va a dibujar. Si la instancia de uno de los sprites tiene menor profundidad que el otro se dibujar ste por encima. Pero si tiene mayor depth se dibujar por debajo. Si uno de los sprites es parcialmente transparente, se ver parte del otro. Si el modo de mezcla est en suma se sumarn los colores de los dos spritesen la zona en la que chocan (por ejemplo para causar un efecto de brillo), pero si est en modo resta se restarn. Como ves, en la parte de los sprites que choca se decide qu hay que hacer segn el modo de mezcla que est activo (esto tambin afecta a los backgrounds). Con esta tcnica se pueden crear efectos visuales muy espectaculares.

J
jpg Es un tipo de archivo de grficos de tamao reducido, pero que no permite transparencias. Ideal para usarlo en fondos no
transparentes o para sprite sheets.

L
left Izquierda. Es un argumento muy comn en las funciones que deben especificar una posicin para indicar dnde debe
situarse el borde izquierdo.

M
midi Es un formato de sonido de muy pequeo tamao. Los midis tienen menos calidad que los wav o mp3. Sin embargo su
tamao es mucho menor, lo que hace que no consuman casi memoria. Esto hace que los midis sean ideales para las msicas de fondo del juego.

P
path Camino o trayectoria. Game Maker te permite dibujar una trayectoria para que luego la siga una instancia. As puedes
hacer que un enemigo se mueva siguiendo este camino, o hacer que en un juego de coches los participantes sigan la carretera.

png Un tipo de archivo de grficos de tamao muy reducido creado para ser transmitido por Internet (png significa "portable
network graphics" o "grficos transportables por la red").

pop-up Son los mensajes o ventanas que aparecen de repente y sirven para dar o pedir informacin al jugador. Por ejemplo,
una ventana que se abra y le pregunte al jugador cmo se llama.

rar Es un tipo de archivo comprimido. Los archivos tipo rar consiguen una gran compresin aunque este formato no est tan
extendido como el zip (ver zip).

recurso Es lo que utiliza el juego. En Game Maker los recursos se dividen en las siguientes
categoras: sprites, backgrounds, sonidos y msica, paths, scripts, time lines, fuentes, objetos y rooms.

room Habitacin o cuarto. En el room es donde se sitan todos los objetos y donde todo el juego tiene lugar. Un juego puede
tener varias rooms y cada una puede ser un nivel distinto, una pantalla de men, de ayuda...

room speed Es el frame rate que queremos que tenga un cuarto y se mide en frames por segundo. Por ejemplo, una room
speed igual a 30 significa que en cada segundo se dibujan 30 frames.

S
score
Marcador. En el juego, puedes hacer que el marcador se incremente cuando el jugador recoja monedas u otros objetos.

screenshot Es una foto de la pantalla en un momento determinado. Los screenshots son muy tiles para promocionar tu
juego o para usarlos en tablas de rcords.

script

Es un trozo de cdigo que puede recibir argumentos y devolver un valor. Los scripts se utilizan para generalizar

cdigo repetido y as ahorrar espacio y ganar velocidad.

scroll Es el movimiento del fondo. Game Maker te permite aadir varios fondos distintos y asignar un movimiento a cada uno,
para dar la impresin de que el decorado avanza cuando el personaje se mueve.

sprite Un sprite es la imagen que se asocia a un objeto y que se dibuja en la pantalla. Los sprites suelen tener varias
imgenes, de forma que si en cada momento se dibuja una imagen distinta parece que se mueve. El formato ms utilizado para los sprites es el de los archivos gif.

sprite sheet Una sprite sheet (o strip) es una imagen no animada de gran tamao en la que aparecen muchas
imgenes de un personaje (o varios) mostrando todos los frames de sus animaciones. El editor de sprites de Game Makerpermite crear sprites animados fcilmente a partir de una sprite sheet.

step

Paso. Los juegos que crees con Game Maker se ejecutan por pasos, de forma que si haces que se pase de un paso a otro

rpidamente dar la impresin de que todo se ejecuta continuamente (Ver frame).

strip Ver sprite sheet.

T
tile Para hacer un fondo, a veces es bueno utilizar imgenes pequeas que, puestas una al lado de otra, forman un dibujo.
Esta tcnica se denomina tiling. Por ejemplo: divides el room en casillas del mismo tamao y en cada una pones una imagen ms pequea (en una un rbol, en otra una casa,...) y haces que se repitan para llenar todo el room. As puedes conseguir fondos muy originales y que consumen muy poca memoria.

tile set Ver tile sheet. tile sheet Es una imagen muy grande de la que se pueden extraer imgenes ms pequeas para crear tiles. time line Lnea de tiempo. En una time line puedes aadir acciones en momentos concretos, de forma que estas acciones
se ejecutarn en el orden que t decidas y justo cuando quieras.

top Arriba. Es un argumento muy comn en las funciones que deben especificar una posicin para indicar dnde debe situarse el
borde superior.

true Verdadero. En Game Maker true=1, es decir, es lo mismo poner true que poner 1.

w
wav Son archivos de sonido de gran calidad, pero que por lo tanto ocupan mucho tamao y consumen bastante memoria. Los
archivos wav se suelen utilizar para los efectos de sonido (explosiones, gritos, disparos...).

width Anchura. Es un argumento muy comn en las funciones de grficos.

Z
zip Es un tipo de archivo comprimido muy corriente. Al comprimir tu juego, conseguirs que ocupe menos espacio y as podrs
distribuirlo ms fcilmente por la red.

Mensajes de error
En esta seccin del manual veremos los mensajes de error que aparecen cuando ests programando o probando tu juego. Cuando te aparezca un error mira en esta seccin para que puedas entenderlo y aprender a solucionarlo.

Cuando pruebas tu juego y aparece algn error se debe a que hay algn fallo en tu cdigo o en las acciones D&D. Esta gua bsica te ayudar a tratar con los errores:

Este es el mensaje tpico de error que te aparecer. COmo ves, tienes 2 opciones: Abort (abortar) e Iqnore (ignorar). Es recomendable que abortes el juego para poder solucionar el error. En la segunda lnea te dice en qu accin se ha producido el error: action number 1. En este caso, se trata de la primera accin. A continuacin puedes ver el evento en el que se ha producido el error: Step Event. La siguiente lnea nos dice el nombre del objeto que

caus el error. Si ests usando el sistema de acciones de Game Maker, con esta informacin puedes ir a la accin que caus el error y comprobarla. Si por el contrario usas GML, La siguiente lnea del mensaje te dir en qu lnea de tu cdigo se produjo el error con la expresin que lo caus. La ltima lnea te dice la posicin exacta del error.

Para que puedas encontrar rpidamente tus mensajes de error en esta seccin, la hemos dividido en 3 partes:

Mensajes de error crticos

Mensajes de error de compilacin

Mensajes de error de ejecucin

Por ltimo, puedes ver una lista con los nombres de la gente que ha colaborado en la redaccin de esta seccin del manual:

Crditos

Mensajes de error crticos


Estos mensajes de error pueden aparecer cuando compiles tu juego o durante su ejecucin. Por ejemplo, puedes obtener el error "Division by zero" en compilacin si en tu cdigo pone algo como "variable=1/0". Pero tambin puedes obtener este error si tienes algo como "variable=1/my_variable". Si "my_variable" toma el valor 0 en cualquier momento durante el juego, el mensaje aparecer en tiempo de ejecucin.

Array index>=32000 Este mensaje indica que ests tratando de acceder a un elemento en un vector de ndice mayor o igual que
32000. En Game Maker el tamao mximo para un vector es de 32000 elementos, por lo que el ndice del ltimo elemento ser 31999.

Cannot find the file Esto ocurre cuando tu archivo Game Maker se ha cambiado de sitio o ha sido borrado. Para solucionarlo,
debe buscar el archivo de Game Maker file t mismo.

Division by zero Este mensaje aparecer siempre que intentes dividir un nmero entre 0. Una forma de evitar este error es
haciendo un pequeo chequeo antes de realizar la operacin:

if a!=0{ mi_variable=1/a; }

Error Creating Stand-Alone: Cannot find the required dlls Esto ocurre cuando el archivo dxdata est
corrupto o ha sido borrado. Para solucionarlo, lo ms fcil es reinstalar Game Maker.

Failed to compile the actions in the objects

Aparece cuando sucede algn error en tu juego y tienes

desactivada la opcin "Display error messages" en Global Game Settings. Para solucionarlo vete a Global Game Settings,activa la opcin y ejecuta el juego para ver el verdadero mensaje de error.

No action libraries have been found Este error ocurre cuando las libreras de acciones han sido borradas,
renombradas o movidas de lugar. Las libreras de acciones de Game Maker son: 02_main1, 03_main2, 07_draw, 06_extra,05_score, 04_control y 01_move. Solucin: Vuelve a situar las libreras en el mapa de libreras o reinstala Game Maker.

Error Creating Stand-Alone: Cannot find valid runner data Sucede cuando el archivo rundata est
corrupto o ha sido borrado. Solucin: reinstala Game Maker.

Negative array index Este error significa que ests intentando usar un ndice negativo en un vector. El primer elemento de un
vector es siempre el elemento con ndice 0. No hay nada antes que l, as que usando un ndice negativo estaras intentando acceder a un elemento que no existe.

Mensajes de error de compilacin


Estos mensajes aparecen antes de que el juego empiece a ejecutarse o cuando pulsas el botn Check the script for syntax errors en un script. Estos mensajes siemrpe aparecern si algo va mal.

Assignment operator expected Aparece cuando usas una variable sin un operador de asignacin (=): my_variable;
Esta expresin no tiene ningn sentido y por eso aparece el error. Otra forma de que aparezca este error es si no pones los parntesis al llamar a una funcin, por ejemplo:

instance_create;
Para solucionarlo, simplemente debes poner los parntesis con los argumentos que necesite la funcin, si es que usa alguno:

instance_create(x,y,object);

Failed to compile scripts Occurre si hay algn error en tus scripts y tienes desactivada la opcin "Display error
messages" en Global Game Settings. Para solucionarlo, vete a Global Game Settings, activa la opcin y ejecuta tu juego para ver el verdadero mensaje de error.

Game has no rooms El juego necesita que exista por lo menos una habitacin para ejecutarse. En las habitaciones es donde todo el
juego tiene lugar, las instancias slo pueden crearse dentro de una habitacin, as que sin una habitacin no se pueden ejecutar acciones o scripts de cdigo.

Program ends before end of code Esto ocurre cuando hay cdigo despus de una llave de cierre: { show_message('Hola Mundo!'); } show_message('cdigo que causa el error');

Para solucionarlo, comprueba tus llaves de cierre, seguramente hay una que est terminando el script demasiado pronto.

Symbol <symbol> Expected En este caso, el error ocurre porque no has puesto un smbolo de cierre, por ejemplo "Symbol }
expected" o "Symbol ) expected":

for (i=0; i<10; i+=1 show_message('Ouch');


O:

{ show_message('Esto tambin da error');

Aparece frecuentemente en bloques anidados, cuando olvidas poner un parntesis o una llave de cierre en el lugar correcto.

Unexpected error occurred when running the game Este mensaje de error te avisa de que ha ocurrido algn
fallo externo a Game Maker. Los fallos ms comunes son falta de memoria grfica o no tener instalado DirectX8.0 superior. Con este error, el juego puede que funcione correctamente en algunos ordenadores y en otros ni siquiera llegue a arrancar, ya que depende exclusivamente de la configuracin del ordenador en el que se ejecute el juego. Otra forma de obtener este error es creando bucles infinitos o usando demasiada memoria.

Wrong number of arguments to function or script Ocurre cuando al llamar a una funcin o un script no
especificas correctamente los argumentos que necesita:

function_name(argument_0, argument_1, argument_2)


Comprueba la funcin concreta en el manual para ver la forma correcta de usarla.

Mensajes de error de ejecucin


Estos mensajes aparecen en un momento determinado del juego cuando se est ejecutando. Dependiendo de cmo programaste el juego puede que las acciones o eventos necesarios para que ocurran no lleguen a ejecutarse. As mismo, algunos de estos errores dependen del ordenador en el que se ejecutan, como todos los errores referentes a la memoria grfica.

Cannot compare arguments Ocurre cuando intentas comparar una cadena de texto y un nmero. Usa las
funciones real() o string() para convertir uno de los argumentos al formato correcto.

Creating instance for non-existing object

La causa ms comn de este error es usar la

funcin instance_create(x,y,object) escribiendo incorrectamente el nombre del objeto. Comprueba que has escrito correctamente el nombre del objeto.

File is not opened for reading Aparece cuando intentas leer o escribir datos de un archivo de texto externo que no ha
sido accedido correctamente. Para acceder a un archivo de texto debes usar la funcinfile_text_open_read("ruta_al_archivo/nombre_del_archivo.extension"). El fallo ms comn es indicar una ruta incorrecta al archivo o usar rutas absolutas. Las rutas absolutas como "C:\\Mi_directorio\\MiArchivo.txt" funcionarn en tu ordenador pero fallarn en los de otra gente si no tienen exactamente la misma estructura de archivos y directorios. Por ello, es mejor usar rutas relativas al directorio donde se encuentre tu juego.

Unknown function or script 'name of function'


o cuando llamas a un script que no existe. Comprueba la ortografa.

Ocurre cuando escribes mal el nombre de una funcin o script

Unknown variable 'variable_name'Este error aparece cuando intentas usar una variable que no ha sido inicializada. Ates
de usar una variable en cualquier evento, debes inicializarla dndole un valor. Tambin puedes activar la opcin"Treat uninitialized variables as 0" en Game Options de forma que Game Maker inicializar automticamente todas las variables a 0.

Variable name expected Ocurre cuando intentas crear una variable con el mismo nombre de uno de tus recursos (sonidos,
sprites, fondos, fuentes, objetos...). La mejor forma de evitar esto es aadiendo un prefijo a los nombres de tus recursos segn el tipo que sean: Objmiobjeto Sprmisprite Fntmifuente Sndmisonido

Wrong type of arguments to + Este error aparece cuando intentas aadir un nmero al final de una cadena de texto o al
revs:

numero=1; show_message("1"+numero);
Para solucionarlo, debes convertir el nmero en una cadena de texto con la funcin string():

numero=1; show_message("1"+string(numero));

Crditos
Esta seccin del manual se inici en Comunidad Game Maker (http://www.comunidadgm.com) y se complet en Game Maker Community (http://forums.gamemaker.nl) con la ayuda inestimable de las siguientes personas: ad134 akafinland correojon grimdaze Magicman657 paul23 scorpius Smarty Tuntis

Un enorme GRACIAS a todos!

Crditos y agradecimientos
La versin original de este manual ha sido redactada por Mark Overmars, creador de Game Maker y puede encontrarse en la pgina oficial de Game Maker: http://www.gamemaker.nl

La traduccin al espaol del manual del Game Maker 6.1 se ha basado en la traduccin realizada por los miembros de Zona Makers del manual del Game Maker 5.0. Puedes encontrar esta versin, as como multitud de ejemplos, tutoriales y ayuda general en la pgina y los foros de Zona Makers: http://www.zonamakers.com

Los usuarios de Comunidad Game Maker y Zona Makers siguientes han participado en la traduccin de este manual de manera totalmente desinteresada:

BrandNew Correojon Danito

Exe_mas Faxtrax Fenris Geo Lestad Lobizon Notos PR_Boy Rodeh85 Unknown_gamer Zurdopower

Desde Comunidad Game Maker y Zona Makers queremos agradecer a todos su colaboracin y su ayuda en el esparcimiento del Game Maker ms all de la frontera que supone el idioma Buen trabajo!

Si ests interesado en ayudarnos con otros proyectos, o simplemente quieres aprender ms sobre Game Maker encontrars ms informacin y ayuda en la pgina y los foros de Comunidad Game Maker: http://www.comunidadgm.com

As mismo, puedes encontrar la traduccin no oficial al espaol del Game Maker 6.1 en la pgina de Estudios Valhalla: http://www.estudiosvalhalla.com

You might also like