Funciones para crear juegos para móvil o tablet
Nunca hemos hablado de hacer un juego directamente para un dispositivo táctil, ya sea un móvil o una tablet. Cuando hacemos un juego en Game Maker Studio, es muy recomendable tener en mente cual va a ser su destino final, y si es para un móvil su sistema operativo, ya sea iOS, Android, Windows Phone o Tizen. Una vez hemos empezado a escribir código, debemos de ir probando y depurando nuestro juego, para no tener sorpresas una vez el proyecto ya esté avanzado.
A mi me pasó personalmente: con un juego ya acabado pensé: Voy a exportarlo a Windows Phone, que si no ha dado problemas en Windows, dudo mucho que lo de en Windows Phone. Tuve que desistir en el intento, con el juego completado era imposible saber por dónde venía ls errores. ¡Siempre hay que testear desde el principio!
Vamos a ver las diferentes opciones que tenemos a la hora de crear juegos para dispositivos móviles, yal final veremos funciones específicas que podemos usar en cualquier dispositivo y exportación.
Eventos de ratón en dispositivos táctiles
Los eventos de ratón funcionan exactamente igual que si creamos nuestro juego para Windows o Mac (o Ubuntu). Pero tenemos algunas excepciones. Por ejemplo, los eventos que implican pulsar el botón central del mouse, Middle button, Middle Pressed
y Middle Released
no funcionan, al igual que Mouse wheel up
y Mouse wheel down
.
Ocurre lo mismo para los eventos Mouse enter y Mouse leave
, ya que no existe ningún cursor de ratón para poder detectar.
Así que hacer un tap en la pantalla es como hacer un click con el botón izquiero del ratón. ¿Y el botón derecho? Pues se puede detectar, ya que Game Maker Studio lo detecta como un doble tap. Si nos fijamos, no existe ningún evento de doble click, así que si queremos simularlo debemos programarlo como si fuesen dos clicks seguidos. Así que si tenemos un juego con doble click, y lo pasamos a móvil o tablet, debemos de tener en cuenta esta casuística. La gente de Game Maker Studio lo sabe, y nos ha facilitado la función device_mouse_dbclick_enable()
, para activar o desactivar esta opción.
Recordemos que aparte de los eventos, también tenemos funciones GML relacionadas con el ratón. Lo mismo que hemos comentado: funcionará sólo una parte de ellas. SI queremos evitar problemas, podemos usar las funciones device que nos proporciona el programa. Por ejemplo, en vez de usar mouse_x y mouse_y, para detectar la posición del mouse, tenemos device_mouse_x() y device_mouse_y(), aunque estas funciones solo se pueden usar si se ha pulsado con tap. ¿Y porque son funciones y no variables de sistema? Lo vemos al final del post.
Teclas virtuales en Game Maker Studio
Ya hablamos de como usar teclas virtuales en Game Maker Studio, pero le daremos un repaso rápido. Cuando estaba creando mi primer videojuego, Go Deeper, pensé:
Como tengo que crear botones, me creo un objeto y utilizo los eventos de mouse con esos botones.
Gran error (como véis cometo muchos errores 😉 ). Cuando hicimos el primer test, la respuesta de los botones era muy lenta. Los eventos de mouse no sirven para jugar, así que no puedes crearte un pad virtual con esos eventos. Lo ideal es asociar eventos de teclado a una tecla virtual en una zona de la pantalla. Así, si creas juegos de plataforma, por ejemplo, puedes usar las teclas de dirección para tu juego de windows y luego con teclas virtuales usar la pantalla (y pintar el pad correspondiente).
Todo esto está explicado en el ejemplo del enlace.
El botón de ir hacia atrás en Android
Sabemos que los móviles Android tienen tres botones, uno de ellos se utiliza para ir hacia atrás. También lo tienen los móviles en Tizen y Windows Phone. Diría que es obligatorio usar, o programar ese botón cuando creas una aplicación o juego para este tipo de dispositivos. Por ejemplo, estás jugando y podrías programarlo para que aparezca el menú de pausa, o para volver al menú principal.
¿Como se programa ese botón en Game Maker Studio? Lo han hecho muy fácil: creando un evento con la tecla <Retroceso> o <Backspace>. Si estamos usando funciones que manejan el teclado, tenemos la constante vk_backspace
. Así que añadiendo este evento ya tenemos resuelta esta parte.
Funciones multitouch para móviles y tablets
Con lo que hemos visto hasta ahora, ya podemos hacer juegos para dispositivos táctiles (además de tener en cuenta el aspect ratio si usas diferentes resoluciones). Pero hay dos características que son propias de los móviles y las tablets: el multitouch y el acelerómetro. Vamos a ver la primera.
El multitouch se podría simular con teclas virtuales, si tenemos en cuenta que definiríamos zonas fijas en la pantalla. Por ejemplo, se usa mucho si ponemos botones, un pad, y funciona correctamente (es como si pulsamos dos teclas a la vez). También puede funcionar para definir áreas que no sean botones: todo la pantalla, sería igual que un Global left mouse, dividirla por la mitad, etc, pero sólo sería para un click.
Aunque tenemos funciones GML que podemos detectar hasta 5 touchs en la pantalla. Son las funciones:
- device_mouse_check_button: detecta si está pulsado.
- device_mouse_check_button_pressed: detecta la primera vez que se ha pulsado.
- device_mouse_check_button_released: detecta cuando se ha soltado
- device_mouse_x: posición x del touch en la room.
- device_mouse_y: posición y del touch en la room.
- device_mouse_x_to_gui: posición x del touch en la pantalla. Recordemos que si usamos views, si se mueve la vista, la posición de la room es diferente a la que vemos en pantalla.
- device_mouse_y_to_gui: posición y del touch en la pantalla.
El primer parámetro de estas funciones indica un valor entre 0 y 4 para detectar cuantos dedos están pulsando la pantalla. Con un simple bucle podíamos saberlo, además de poder gestionar las diferentes acciones.
Funciones del acelerómetro para dispositivos móviles
El acelerómetro es una característica propia de los móviles, las tablets y algunas consolas. Para ello, debemos de pensar en las tress coordenadas del espacio: x, y, z. En Game Maker Studio estamos acostumbrados a usar las variables de sistema x e y, ya que nuestros juegos son siempre en dos dimensiones y son las coordenadas de la room.
Pero en un móvil, por ejemplo, su posición puede variar en las tres dimensiones. Para ello, disponemos de tres sencillas funciones que nos indica la posición actual en sus coordenadas: device_get_tilt_x()
, device_get_tilt_y()
y device_get_tilt_z()
. El valor devuelto de las funciones están en el rango de -1 y 1, es decir, los extremos corresponderían a girar en un ángulo de 90 grados (en positivo o negativo).
Con estos valores, se podrían utilizar para mover un objeto, tal y como sale en la ayuda oficial:
if display_get_orientation() = display_landscape {
x += sign(device_get_tilt_y());
} else {
x += sign(device_get_tilt_x());
}
Vemos en el ejemplo que tiene en cuenta como está orientado el móvil, si en horizontal o vertical. Eso dependerá de si nuestro juego acepta ambos.
Conclusión final
¿Es posible crear un juego para móviles y tablets? Claro que sí, como mínimo hay que saber que se puede hacer simplemente con los eventos de ratón. Si además necesitamos movimiento, que en un juego de pc gestionamos con el teclado, se puede fácilmente creando teclas virtuales. Pero además tenemos funciones específicas para gestionar cosas propias de los móviles, como puede ser el multitouch o el acelerómetro.
Y ahora una pregunta: ¿porqué se utiliza el touch y el tap para móviles? ¿Habéis oído alguna vez multi-tap?
Hola amigo, excelente post, solamente en la parte final con esas preguntas, quedan para un nuevo post, en mi casa no se que es multi-tap
Saludos.
A la pregunta ¿porqué se utiliza el touch y el tap para móviles?, me refería a porque se utilizaba esas palabras. Todo el mundo relaciona el click con el ratón, he visto usar touch y tap, y también multitouch, pero curiosamente no multitap. Entiendo que tap sería como hacer un click con el dedo, y touch es para marcar que todavía estás pulsando (más lógico cuando haces varios).
Supongo que a veces no me acabo de explicar… 😉
buen día, alguien sabe como se hace zoom con los dedos? que comandos se usan para sustituir la rueda el ratón al hacer un juego para móviles?
Gracias de antemano
He encontrado este tutorial, pero es con el ratón. Supongo que la parte difícil ya está hecha, espero que te ayude.
Las instrucciones son demasiado largas así que….. Pasó de leerlo ? Demasiado complicado, paso, voy a buscar en otra página….. ?
¡Vale!
Cuando lo encuentres pásate por aquí y lo ponemos como referencia.
Buenas, te agradezco toda la ayuda que nos das con estas guias, a mi entender son claras y practicas…ahora en el juego q armo el usuario tiene que ingresar un valor(numerico) pero no encuentro la funcion para que desde que en android al querer ingresar el valor aparezca el teclado para que ponga el valor, ¿que funcion es la que llama el teclado del dispotivo???
Muchas gracias.-
En principio no hay funciones para usar el teclado de móviles, tanto para Android como iOS. Prueba con la función get_integer_async, a ver si aparece y te deja ingresar el número. Cuidado que al ser un evento asíncrono tu juego seguirá ejecutándose.
http://docs2.yoyogames.com/source/_build/3_scripting/4_gml_reference/asynchronous%20functions/get_integer_async.html
esto es genial ???????
Como podría hacer un multi touch sin eso eventos osea con gml