Propiedades avanzadas de sprites en Game Maker Studio
Hemos aprendido que es un sprite y para que se usan en nuestro juego de Game Maker Studio. Ahora vamos a ver en detalle todas sus propiedades que podemos usar.
Origen
En la parte inferior izquierda de la ventana de propiedades de sprites, nos encontramos el Origin del sprite, que es el punto en el sprite que corresponde a su posición en la habitación, en inglés room. Cuando se crea una instancia a una posición X / Y en una room, el origen se coloca allí. Por defecto es la esquina superior izquierda de la imagen, por eso al principio de añadir un sprite el valor de x / y es 0, pero a menudo es más conveniente colocarlo en el centro. Para facilitar esa tarea, tenemos el botón Center, aunque también podemos ponerle cualquier valor como origen. Podemos hacerlo haciendo click en la imagen , de esta manera se moverá la cruz que vemos, o introduciendo los valores en las cajas de texto que vemos. Hay otra característica que también nos puede interesar, y es colocar el origen fuera de la imagen. Si utilizamos números negativos se colocará hacia la izquierda y arriba, si ponemos números positivos más grandes que la altura y la anchura del sprite se moverán hacia la derecha y hacia abajo. Puede ser necesario para objetos que utilicen varios sprites a la vez.
Comprobando colisiones de nuestros sprites
Las opciones de Collision checking, chequeo de colisiones, son muy importantes para nuestro juego, ya que influyen directamente a cómo interactúan nuestros objetos y como se ejecuta. Si tenemos una configuración incorrecta, tendremos un impacto negativo en el rendimiento de nuestro juego. Cuando dos instancias de nuestro juego se “encuentran”, y estas dos instancias tienen una máscara válida (lo vemos ahora que es la máscara), un evento colisión se genera mediante la superposición de la máscara. Esta máscara la podemos definir con precisión o no, incluso adaptarla para cada subimagen de nuestro sprite. Vamos a ver un ejemplo de esto:
En la primera imagen, tenemos dos instancias del mismo objeto, que no tienen marcado el check Precise collision checking. Significa que la máscara ocupa todo el tamaño del sprite, por eso vemos que la máscara es cuadrada. Entonces el evento colisión se ejecuta, aunque los objetos no se han tocado. En la segunda imagen, uno de los objetos si que tiene el check de Precise collision checking marcado, e igualmente se ejecuta el evento colisión porque sus máscaras se tocan. Vamos entendiendo que la imagen no tiene nada que ver con el evento colisión, sino su máscara, así que podemos definirla como queramos. En la tercera imagen vemos que no existe un evento colisión, ya que sus máscaras no se tocan. En la cuarta imagen si que se genera el evento.
Entonces, ¿porqué no marcamos siempre el check y la máscara será igual que la imagen? Porque dependiendo de cómo sea el dibujo del sprite esto puede ser muy lento. Con el chequeo de colisión precisa marcado, se analiza cada píxel del sprite para ver si se va a generar un evento colisión, así que la recomendación es que siempre tengamos desmarcada esta opción, a no ser que realmente lo necesitemos.
Si nos fijamos, también tenemos el check separate collision masks. Con esta opción tendríamos una máscara totalmente independiente por cada subimagen del sprite. No hace falta decir que esto también significa relantizar más la comprobación del evento de colisión, así que sólo hay que utilizarlo cuando creáis que es estrictamente necesario.
Ajustes de textura en sprites
Esta sección es para decirle a Game Maker como queremos que guarde las imágenes, para usar en los diferentes dispositivos. Si hacemos juegos para Windows o Mac, estas opciones no son muy importantes, pero si hacemos juegos para iOS o Android, o HTML5, la gestión de las texturas son importantes para optimizar el rendimiento de tu juego.
Cuando Game Maker compila tu juego, coge todas las imágenes del sprite y las pega en imágenes de un tamaño fijo, así las tiene todas juntas en varios ficheros. Si no tenemos la versión gratuita de Game Maker Studio, podemos definir el tamaño de estas imágenes: 512×512, 1024×1024… Desde esta opción podemos decir que este sprite va a un grupo de texturas en concreto. Por ejemplo, si estamos definiendo una serie de sprites (elementos de fondo, enemigos, etc) y tenemos claro que unos van a a salir en un nivel y otros en otro nivel diferente, podríamos crear texturas por cada nivel y separarlos. Así cuando nuestro juego ejecute ese nivel, sólo cargará las texturas de las imágenes que nos interesa. Para definir los grupos de texturas, se hace en Global Game Settings, pestaña Texture Groups. Hablaremos de cómo gestionar texturas en próximos capítulos, ya que es un tema interesante para, tal y como hemos comentado, no queréis hacer juegos solamente para ordenadores.
Importando imágenes vectoriales
Game Maker no solo importa ficheros de tipo imagen, como puede ser PNG o BMP. Aunque son los más habituales a la hora de usar, no son los más óptimos, ya que suelen ocupar mucho espacio de memoria, y además tienen una limitación en cuanto al tamaño, ya que al ampliar vemos que pierde calidad. Por eso, desde la versión 1.3, es posible importar ficheros con formato vectorial, en concreto usa la extensión SWF, que es el formato estándar que usa Adobe Flash. La principal ventaja es que el fichero, en vez de ser una cuadrícula de píxeles, que cuando se escala tenemos esos mismos píxeles pero más grandes, guarda información de cómo hemos dibujado el sprite. Por ejemplo:
Aquí vemos la diferencia cuando se amplia una imagen normal y una vectorizada. Para entender cómo está internamente esta imagen, vamos a verlo sin las texturas de color, sólo las líneas:
Como vemos, ampliar esta información de líneas hace que no perdamos esa calidad que hemos visto, además que los ficheros ocupan mucho menos. La gran desventaja de este tipo de ficheros es que “interpretar” estas líneas tiene un coste mayor que las imágenes, así que conforme aumentemos la complejidad de la animación, más costoso será.
Para importar imágenes vectoriales, lo hacemos igual que cualquier imagen, pero tenemos que elegir ficheros SWF. Cuando hemos elegido el fichero, vemos que habrá una barra de proceso, donde informará de posibles errores de formato que no pueda aceptar el programa. Cuando ha finalizado, veremos el editor de propiedades del sprite. ¿Qué ha cambiado en esta pantalla? No tenemos el botón de Edit Sprite, ya que no es posible editarlo, pero si vemos un botón de Show Sprite, que abrirá el programa que hemos definido para previsualizarlo. Es posible que la previsualización no coincida exactamente como Game Maker Studio interpreta el fichero, ya que, por ejemplo, los navegadores siempre aumentan al tamaño máximo el fichero, y Game Maker respetará el tamaño con el que se ha hecho. También vemos que podemos aumentar la calidad del sprite cuando se dibuja.
Hay una serie de cosas que tenemos que tener en cuenta cuando se utilizan ficheros SWF, podéis mirar todas las características aquí.
Importando sprites como animaciones con esqueleto
Hay otro tipo de sprites que también son diferentes de los ficheros de imagen y se pueden usar con Game Maker Studio. Son animaciones con esqueleto, principalmente hechas con Spine. Un sprite hecho con este tipo de animación se ha creado con un esqueleto base, y animado usando fotogramas para moverlo.
Para importar un fichero de este tipo, se hace igual que hemos comentado anteriormente, pero con la extensión JSON para seleccionar.
Una vez hemos cargado los ficheros, podemos modificar sus propiedades de colisión, pero estaremos limitados a como los hemos definido en el programa Spine, que es donde definiremos las máscaras.
En el próximo post hablaremos de cómo personalizar y editar las máscaras de un sprite, para no basarnos solamente en la imagen que estamos importando.
hola David.
estoy mirando si hay algun programa , en español, que puedas crear tus sprites, yo soy muy mala en dibujo, pero aprender viene muy bien, y a ser posible gratuito.
un saludo
marta
No creo que seas más mala que yo dibujando 😉
Si tu intención es probar con el pixelart, te recomiendo la web de PixelsMil, que tiene algunos tutoriales y herramientas. Por ejemplo:
Herramienta Piskel (salgo yo como mención ^_^)
Crear y animar sprite
Configurar Gimp para pixel art (herramienta gratuita tipo Photoshop)
Igualmente, echale un vistazo a su web, y verás que te puede ser muy útil.
¡Saludos!
David
muchas gracias, lo mirare
Hola, como estás? Llevo algo de tiempo desconectado de la web por algunos problemitas pero aquí estoy de regreso y buscando algo de información. Una pregunta, se puede seleccionar una subimagen de un sprite como máscara para colisionar? Todo esto va por el camino de los juegos isométricos, ya que estoy incursionando dentro de este tipo de juegos… De antemano muchas gracias y saludos.
No puedes elegir una subimagen para la máscara. Puedes decir que la máscara será de cada subimagen, o definir una personalizada en el sprite del tamaño que quieras y que sea rectangular, ovalada, etc.
Lo que buscas, a lo mejor, es que el objeto coja siempre la misma máscara. Yo lo que haría es coger esa subimagen, dejarla en un sprite aparte y decirle al objeto con el botón Mask que la máscara no será del sprite que tenga en ese momento, sino que SIEMPRE será la del scprite creado.
Aquí la explicación:
Máscara en objetos
Hola no se de cuando es esto pero tengo un problema.
E puesto un código para reflejar el sprite cuando miro para otro lado y el código es este:
Ir (intMove != 0) image_xscale = intMove;
Y funciona osea yo miro para la izquierda y el sprite de refleja y mira hacia allí pero como que no lo hace en el lugar, quiero decir que no lo hace estando en el mismo lugar sino que se teletransporta unos pixeles hacia el lado que presione.
Sabes cómo solucionarlo?
Eso es porque el origen del sprite, donde pone X Y, no está justo en medio, y al moverlo te lo cambia ligeramente.