Como funciona el Drag and Drop en Game Maker Studio 2
Uno de los cambios más importantes que puedes ver en Game Maker Studio 2 es el uso de las acciones para programar con nuestros objetos. Aparte de que todos los iconos de la caja de herramientas son diferentes, hasta que nos acostumbremos a ello, también se ven diferentes las distintas acciones que podemos arrastrar a un objeto. Pero vamos a explicarlo como si no tuviéramos ningún conocimiento de esto en Game Maker Studio.
- 1 ¿Qué son las acciones D&D?
- 2 Event Tabs – Fichas de eventos
- 3 Action Overview – Acciones
- 4 Action Block Workspace – Área de trabajo de los bloques de acciones
- 5 Toolbox – Caja de herramientas
- 6 Como crear bloques de acciones
- 7 Scripts de bloques de acción
- 8 Cambiar Drag and Drop a código GML
- 9 Resumen final
¿Qué son las acciones D&D?
Las acciones DnD, como ves, estoy poniendo lo mismo de las diferentes maneras que te lo puedes encontrar, es la manera que tenemos de programar los objetos sin escribir nada de código. Lo veremos como una secuencia de comandos, dónde estos comandos se presentan visualmente.
Eso no significa que no estemos programando código cuando usamos acciones Drag&Drop, el código se crea, pero se presenta de manera visual mediante bloques de acciones en lugar de texto. Las acciones son simples expresiones o enunciados que pueden ser encadenados juntos para que una instancia de un objeto haga algo cuando se coloca en la room.
Por ejemplo, puedes tener una acción en el evento Create para mover una instancia en una dirección aleatoria y otra acción en un evento de Colisión para hacer que rebote en las cosas que colisiona (como una pared).
¿Como se ven las acciones Drag and Drop en Game Maker Studio 2? Veamos un ejemplo:
En la imagen vemos un objeto abierto para su edición. Tenemos el objeto con sus propiedades a la izquierda, los eventos en la parte central, y del evento seleccionado la ventana de Código, todos estos formularios encadenados para no perder su secuencia. Aunque la ventana ponga código, vemos que hay una serie de bloques, cada bloque es una acción D&D. Veamos en detalle esa ventana de Código.
Vamos a ver cada una de las áreas de la ventana.
Event Tabs – Fichas de eventos
Cuando añadimos un evento al objeto, se abre una nueva pestaña en la ventana para mostrar el contenido de dicho evento. Puedes añadir varios eventos y tener varias pestañas abiertas al mismo tiempo, cambiar entre ellas y editarlas como quieras. También puedes cerrar las pestañas en cualquier momento, y si seleccionas el evento otra vez se volverá a abrir. También puedes arrastrar la pestaña para convertirla en una ventana nueva, tal y como se hace con los workspaces.
Action Overview – Acciones
A medida que añades bloques de acción al evento, aparecerá un resumen con una simple descripción en inglés de lo que está pasando. Esta previsualización tiene el orden de como se ejecutará el evento, y haciendo click en cualquier elemento de la lista irá al bloque de acción para su edición.
Action Block Workspace – Área de trabajo de los bloques de acciones
Éste es el área de trabajo dónde arrastramos las acciones desde la Caja de Herramientas. Si haces click en una acción y la arrastras hasta esta área, se añadirá a la lista de acciones que ya hay y podrás editarla. La mayoría de acciones tienen varios parámetros que se pueden configurar, y la mayoría pueden tomar palabras clave (como other, all y noone), variables de instancia ( como id, visible, sprite_index, etc.) o funciones de GML. Por ejemplo, puedes poner la acción Set Direction y utilizar la función GML random(val)
para poner una dirección aleatoria.
A medida que añadas bloques de acción, verás que se encadenan visualmente para indicar el orden en que se producirán las diferentes acciones, aunque la forma en que se crea esta cadena dependerá del bloque inicial que se haya utilizado. Por ejemplo, un bloque if tendrá dos cadenas, una a los bloques que se van a llamar si la condición que se verifica es verdadera, y luego otro bloque siguiente después de eso.
Mientras estás en el área de trabajo de los bloques, puedes usar el botón central del ratón para desplazarse alrededor, y la rueda del ratón para moverte en la lista de acciones hacia arriba o hacia abajo. SI pulsas la tecla <Mayus> mientras mueves la rueda del ratón, la vista se desplazará hacia la izquierda/derecha, si lo haces con la tecla <Ctrl>, la vista se acercará y alejará, permitiendo ver más espacio de trabajo con las acciones. Si haces click en cualquier acción de la lista de acciones de la izquierda se centrará el área en esa acción, restableciendo el zoom y posición.
También puedes cambiar el tamaño de cada bloque, situando el ratón en el borde del bloque y arrastrándolo en la dirección que te interesa.
Toolbox – Caja de herramientas
La caja de herramientas es dónde se almacenan todas las acciones de DnD, con diferentes secciones que están agrupadas en acciones similares o relacionadas. Cada colección de acciones está relacionada con un tema específico o un propósito común, y simplemente haz click y arrastra una acción de la caja al área de bloques que he comentado arriba. Para simplificar las cosas, como hay muchas accione, puedes utilizar la barra de búsqueda, dónde pone Search en la parte superior, para buscar una acción específica o filtrar las acciones visibles. Por ejemplo, si pones Draw verías todas las acciones relacionadas con dibujar. También tienes una carpeta de Favoritos para arrastrar cualquier acción que usas habitualmente. Esto es muy útil si hay ciertas cosas que haces repetidamente. La carpeta de Favoritos se puede vaciar si haces click en el icono pequeño de la papelera.
Como crear bloques de acciones
Para añadir comportamientos a objetos, es decir, programar para que los objetos hagan algo, puedes construir el código usando las acciones que hay en las diferentes bibliotecas disponibles en la caja de herramientas que he comentado.
Primero de todo, debes crear un nuevo Proyecto de Drag and Drop, y luego crear un nuevo objeto (puedes asignar un sprite asociado al objeto). Luego en el objeto añadimos los eventos que vamos a necesitar, y en cada evento añadimos las acciones de código D&D. La secuencia sería como la de la imagen:
Recuerda que al añadir el evento se abre por defecto una pestaña nueva, con el evento asociado. Muy bien, ya tenemos todo preparado para añadir cualquier acción al evento, pero eso no significa que añadir cualquier acción hará que funcione el juego correctamente. ¿Por qué pasa eso? Algunas acciones requieren trabajar con variables, otras son acciones para dibujar y sólo se pueden usar en un evento específico. ¿Cómo se cual usar? Bueno, aquí hay que aplicar algo de lógica… si una acción te pide una variable, hay que crearla antes, así que antes deberíamos crear la variable (dentro del mismo evento o en otro) y luego usarla. Puede parecer complicado, pero al final con la práctica sería suficiente.
Cuando arrastras una acción desde la toolbox al área de trabajo, se expandirá para mostrar los parámetros (también se dice argumentos) disponibles, que puedes rellenar y cambiar para definir su comportamiento.
En la imagen arrastramos la acción Assign Variable de la biblioteca. Vemos a la izquierda que aparece de forma abreviada lo que hace. Si hacemos click en esa lista de acciones, iremos a esa acción para poder editarla. Puedes continuar añadiendo acciones al evento si lo necesitas, cada nueva acción se encadena a la anterior para mostrar el workflow que estás construyendo. Ten en cuenta que al añadir una nueva acción se resaltará dónde la puedes añadir, habitualmente por debajo.
A medida que añades acciones al área de trabajo, éstas se encadenan a las acciones anteriores para que puedas ver el workflow del código DnD, con una acción que lleva a la otra. También se irán añadiendo en el panel de vista preliminar/abreviada, con su orden de ejecución.
Algunas acciones colocarán el código en una cadena separada lejos del flujo principal, por ejemplo, la acción if creará una subcadena de acciones si comple con la condición correcta (en este caso, si has pulsado el botón izquierdo del ratón.
Pero como vemos en la imagen, la acción if puede tener otro workflow si no cumple la condición.
Ahora vamos a ver algunos conceptos básicos cuando añadimos una acción del tipo D&D, que afectan a todas las acciones en común.
Target Variables – variables de destino
Es importante señalar que muchas acciones ofrecen un Target, una variable de destino que puede ser marcada como temporal (el check Temp). Por ejemplo:
Lo que significa que puedes proporcionar una variable de destino que mantendrá el valor devuelto por la acción. En el ejemplo anterior, la acción devolverá el volumen del recurso de audio seleccionado, por lo que suministrará en la variable de destino que pongamos ese valor para poder usarlo posteriormente. Pero esa variable de destino tiene que ser declarad antes utilizando Assign Variable (variable de instancia), Declare Temporary Variable (crea una variable temporal local). Pero si marcas la opción Temp, entonces puedes simplemente añadir un nombre de variable y la acción creará esa variable y le dará el valor de la acción. Así cualquier acción usada después podrá accedera ese valor de la variable temporal, pero sólo dentro del mismo evento o script. Las variables temporales sólo están disponibles dentro del ámbito en el que se crearon.
Action Scope – alcance de la acción
No sólo las variables tienen un alcance concreto, las acciones también pueden tener ámbitos diferentes. De hecho, casi todas las acciones pueden tener un alcance diferente para trabajar, que se establece desde la ventana desplegable abierta:
Aquí marcamos principalmente desde cual instancia ejecutará la acción. El alcance predeterminado es self, que significa que una ves que el objeto se crea como instancia en la rooom, esa instancia ejecutará el código de la acción. Sin embargo, esto no es siempre lo que se quiere, y es posible que algunas acciones afecten a otras instancias, o incluso a todas las que hay en la room. Aquí es dónde existe un cambio en el alcance de la acción.
Vamos a enumerar los diferentes ámbitos que podemos tener, pero debemos tener en cuenta que el cambio de ámbito de una acción sólo se aplicará al nuevo ámbito en esa acción, y no en las acciones posteriores. Si queremos que se ejecuten en varias acciones encadenadas, existe una acción específica llamada Apply to…, de la que ya hablaremos más adelante.
- Self: es el ámbito predeterminado para una acción y simplemente indica que la acción sólo debe ser llamada por la instancia que está ejecutando el código.
- Other: el ámbito other tiene dos funciones principales y el valor devuelto dependerá de dónde y como se utiliza. En el evento de colisión , other devolverá el ID de instancia único de la colisión. Puedes crear una instancia de bala y tener una colisión con jugador, y utilizar other para eliminar puntos de vida del objeto jugador, y luego volver al ámbito self para destruir la instancia de bala.
Fuera del evento de colisión , el ámbito other se comportará como si estuviera configurado como noone, a menos que se esté llamando desde dentro de un bloque de acciones. Esto significa que si cambias el ámbito de un grupo de acciones a un objeto específico, mientras que esas acciones se ejecutan, other devolverá el ID de instancia desde dónde configuramos la acción. Veamos un ejemplo: colocamos la acción Applies to, diciendo que aplique al objeto obj_Player (si hay más de una instancia en la room se ejecutará en todas). Cambiamos el sprite, así que lo hará del objeto que hemos mencionado, y luego creamos un objeto obj_Squirrel, cogiendo como lugar para crearlo el X/Y de other. Ese other es de dónde estamos poniendo el código, no de obj_Player (recuerda que estamos dentro de Applies to–>obj_Player).
- All: cuando colocamos una acción como all, le decimos a Game Maker Studio 2 que ejecute ese bloque para cada instancia activa dentro de la room actual. Por ejemplo, si ponemos una acción Destroy Object Instance, y le decimos que lo aplique para all, desaparecerán todas las instancias de la room, sin importar desde que objeto se ha creado.
- Object: una acción se puede dar a un objeto, lo que significa que todas las instancias del objeto ejecutará esa acción al mismo tiempo cuando se llama. Así que si tienes 345 instancias enemigas en la room, y quieres que todas apunten a un punto X/Y específico, llamarás a la acción Set Point Direction, y el alcance de la acción será el objeto obj_enemy. Así todas las instancias cambiarán de dirección.
- Expression: el campo de entrada expresión es para ingresar el ID de una instancia específica que deseas que funcione la acción. Puede ser el valor de ID de una instancia del editor de rooms, o puede ser el ID de una instancia que hayas almacenado en una variable (dónde la variable sería el valor de entrada), o incluso una función que devuelve una instancia.
Como vemos, hacemos una acción Set Sprite a una instancia recién creada por el código. Recuerda que esta instancia ejecutará antes su evento Create antes de aplicar esta acción.
Auto Complete – autocompletado
Al trabajar con Drag & Drop, tendrás que añadir variables y expresiones en los diferentes campos de entrada. Sin embargo, al hacer esto, te aparecerá una ventana de autocompletado que te puede ayudar:
Esta ventana emergente mostrará todas las variables, constantes y funciones de GML, así como los recursos que contengan las letras del principio de lo que estamos escribiendo. Puedes usarlo para encontrar rápidamente el recursos o la variable que queremos utilizar, sobretodo si usamos nombres identificativos (sprites que empiezan con spr_, objetos que empiezan con obj_, etc.). Ten en cuenta que todas las variables que aparecen en la ventana de autocompletado pueden usarse en cualquier lugar dónde se espera una variable o expresión, como ocurre con las funciones GML.
Action Expansion – expandir una acción
A veces, al usar una acción, verás un pequeño icono al lado . Este icono de + significa que puedes ampliar una acción para realizar tareas adicionales o para añadir más parámetros. Por ejemplo, si miramos la acción Declare Temporary Variables, puedes ver esto:
Al hacer click en +, te permite declarar más variables, facilitando y acelerando la definición de varias variables al mismo tiempo.
El icono de + también se puede utilizar para aquellas acciones que requieren parámetros opcionales, como la de Choose, que permite añadir valores diferentes y que devolverá uno de ellos. Un ejemplo para elegir una room de una lista:
Scripts de bloques de acción
Uno de los recursos que hablamos en su momento fueron los scripts. Cuando hablamos del editor, nos centramos básicamente al escribir en GML, pero también podemos usar scripts sólo con acciones Drag&Drop.
Un script DnD puede tomar valores diferentes (o ninguno), y luego realizar una cadena de acciones, además de devolver un valor (o nada). Lo llamaríamos usando la acción Execute Script, que se ve así:
Las variables de entrada se llaman argumentos, o parámetros, y puedes poner hasta 4 de ellos usando esta acción. También puedes usar la acción Execute Code, llamar al script y poder poner hasta 16 parámetros (poniendo argument0
, argument1
, …argument15
) o usar el array de argument[n]
.
Para crear un script D&D, simplemente usa el botón derecho del ratón en Script, en el árbol de recursos, y seleccionas en el menú Create. Esto creará un nuevo script D&D y abrirá la ventana del editor:
Puedes asignar un nombre al script haciendo click derecho en el árbol y elegir Rename. Recuerda que al ser un nombre de recurso, debe empezar por una letra, y sólo puedes poner letras y números y el símbolo “_”.
Veamos un ejemplo de como pasar argumentos a un script de este tipo, en la siguiente imagen:
Como ves, al principio creamos una variable temporal, se destruirá cuando salga del script, y como valor le pasamos argument0. Al usar argument0 ya le estamos pasando el parámetro, luego crea tantas instancias, en posiciones aleatorias, como las que decimos en el parámetro. Ahora vamos a ejecutar el script, y lo hacemos así:
Ya sabemos como crear 20 instancias aleatorias del objeto que hemos definido. Ahora vemos como un script devuelve un valor. Si no queremos que devuelva nada, no hay que tener en cuenta, y si queremos que devuelva algo, usamos la acción Return. Usar la acción Return hace que finalice el script, y por lo tanto no se ejecutarán las acciones colocadas después, así que debemos saber muy bien como montamos el workflow. Por ejemplo:
El script anterior simplemente comprueba todas las instancias de una room para ver si uno de ellos es el obj_Player, y el script devuelve true o false. Se puede llamar así:
Por lo tanto, llamamos al script y almacenamos el valor devuelto en una variable temporal llamada exists, luego comprobamos su valor con If, y seguimos con la acción que crea una instancia de obj_Player_Bullet.
Al usar los scripts DnD puedes usar las mismas acciones que cuando añades acciones a un evento, incluso llamar scripts desde scripts, y así hacer tu código más modular. Los scripts que creamos pueden ahorrar mucho tiempo cuando creamos las mismas secuencias de acciones, y que sean más fáciles de leer y depurar.
Cambiar Drag and Drop a código GML
Otra característica es poder convertir todo el flujo que hemos programado en las accions D&D a código GML, y de esta forma ver que sucede. Sin embargo, antes de cambiar las acciones en GML, primero puedes hacer un preliminar de como quedará, si haces botón derecho y eliges del submenú Live Preview, que abrirá la siguiente ventana
Cualquier cambio que hagas en las acciones verás que actualiza el código de la Vista Previa. El código de la vista preliminar no se puede cambiar directamente, pero puedes copiar el código si nos interesa en otro lugar. Si decides convertirlo a código, puedes usar el menú que aparece Convert to GML. La primera vez que lo hagas te saldrá un mensaje de advertencia, porque no puedes luego volver del código a las acciones. Este sería un ejemplo después de la transformación:
Como ves, cada acción está separada por sus llaves correspondientes. Si las acciones hace cosas complejas, el código resultante también lo será.
Para finalizar, si hemos pasado a código GML y queremos volver a usar acciones Drag&Drop, en el menú del botón derecho existe la opción Convert to DnD, meterá todo el código en una acción Execute Code, y luego ya puedes añadir más acciones.
Resumen final
Como ves, las acciones en Game Maker Studio 2 han tenido un cambio radical respecto a lo que estábamos acostumbrados a todas las versiones anteriores del programa. Aún no hemos visto al detalle cada una de ellas, pero ya os adelanto que han aumentado considerablemente respecto a las que siempre veíamos. ¿Es un cambio positivo respecto a lo anterior? ¿Merece la pena usar acciones en GMS2, o es más fácil escribir código GML? ¿Crees que si dominas las acciones aprenderás más fácil a programar?
hola, tengo un grave problema y es que cuando voy a crear el evento quiero escribir el codigo y no me deja, quiero eliminar eso de drag and drop, necesito saber como arreglarlo cuanto antes
Si quieres un evento, haces botón derecho sobre el evento y eliges “Convertir a GML”.
Si quieres todo el proyecto, te vas al árbol de recursos, Opciones Principal, y desmarcas la casilla “Usar DnD como tipo de script predeterminado”
Cuando hablamos de la segunda opcion Other, podriadas dar un ajemplo con un accion en un video juego, realmente con ese ejemplo no me queda claro, no puedo asimilarlo xD, y lo he leido varias veces 🙂 Gracias de ate mano
Imagina un objeto bala, que cuando choca contra un enemigo lo destruye.
Añades un evento colisión al objeto bala, pero ¿como eliminas el objeto enemigo si estás programando dentro de la bala?
Si añades una acción Instance Destroy, eliminarías la bala. Pero si lo que quieres es eliminar al enemigo, a esa acción le pones Other.
Other te dirá con quién ha chocado la bala y podrás programar sobre él.
Espero haberte ayudado.