Guia avanzada de las características de los eventos para Construct 2.

3

Tagged

Stats

17,901 visits, 19,449 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 27 Feb, 2014. Last updated 25 Feb, 2019

Construct 2 ofrece algunas características avanzadas en la hoja de los eventos. Esto puede permitir a los usuarios expertos a aprovechar al máximo el sistema de eventos, permitiendo lógica mas sofisticada que normalmente es posible con eventos estándar. Este tutorial resume las características de los eventos que estan destinados a un uso avanzado o trabajan de forma diferente a otros eventos normales, con algunos consejos y trucos.

Este tutorial está destinado para usuarios experimentados, Asegúrese de leer How Events Work si todavía no lo has hecho ya que este tutorial se basa en esos fundamentos.

Condiciones especiales

El objeto System tiene tres condiciones que trabajan de forma diferente a las condiciones normales. Para mas información, mira system conditions en el manual.

Disparar una vez mientras sea verdadera

Esta condición hace efectivo que se dispare un evento que es verdadero continuamente.

This condition effectively makes a continuously-true event in to a trigger. Pone a prueba "si no alcanzó esta condición último tick". Por lo general, se coloca como último estado en un evento, ya que si es la primera condición, llega inmediatamente y por lo tanto nunca satisface su prueba.

Uno de los lugares donde Disparar una vez es útil es para reproducir sonidos. Considera el siguiente evento:

Este es un error comun - recuerda que este evento se ejecuta en cada tick, que es alrededor de 60 veces por segundo en la mayoria de los ordenadores - resultando en el sonido que se reproduzca y se vuelva a reproducir continuamente siempre y cuando la variable de salud del jugador sea igual a 0. A menudo el resultado suena horrible.

En su lugar, queremos que se reproduzca un solo efecto de sonido la primera vez que el contador de vida sea igual a 0.

Agregando disparar una vez se logra esto:

Ahora el sonido se va a reproducir la primera vez que la vida llegue a 0. No se va a reproducir hasta que la vida cambie a otro valor y vuelva a 0, en el que se va reproducir un solo sonido otra vez.

Un truco útil es poner disparar una vez en un grupo de eventos:

Si el grupo esta siendo habilitado y deshabilitado durante el juego, esto hará correr el evento una vez cuando el grupo este habilitado. Actua como una especia de "cuando el grupo este habilitado" disparar.

Recoger todo

Como esta descrito en How Events Work, los eventos tipicamente funcionan filtrando instancias que no cumplen con las condiciones. events typically work by filtering instances that don't meet the conditions. Un subconjunto de instancias restantes son las que cumplen con todas las condiciones, despues las acciones corren en esas instancias.

Recoger todo es la única condición que trabaja en reversa: restaura todos los objetos, entonces las condicione subsecuentes son recogidas desde todas las instancias otra vez. Es dificil llegar a un ejemplo simple e intuitivo de esto, pero puede ser útil para usuarios avanzados que tengan que lidiar con eventos secuandarios profundamente anidados en las que conviene restablecer los objetos recogidos.

Else (Sino)

El evento else se ejecuta si el evento previo no se ejecutó. No se puede colocar después de un disparo y tiene que ser la primera condición en el evento. Si el Else no esta in el lugar correcto, va a aparecer en rojo indicando que debe moverlo, como se muestra a continuación. No se puede previsualizar o exportar tu proyecto si la condicion Else esta en el lugar equivocado, ya que la lógica no tiene sentido.

Un lugar común para Else es útil cuando se modifica una bandera o variable. A menudo los nuevos usuarios tienen el siguiente error al cambiar una variable, en este caso apretando espacio:

Note como si MyFlag es 0 se establece en 1, pero cuando el proximo evento inmediatamente lo pone de nuevo a 0 otra vez, poruqe MyFlag es igual a 1! (es por esto que el orden de los eventos es importante: recuerda que los eventos corren de arriba a abajo.) Este evento no tiene el efecto deseado y MyFlag se mantiene en 0 sin importar cuantas veces la tecla espacio es presionada.

Una solucion es establecer MyFlag a 1 - MyFlag. Sin embargo solo funciona con números y no siempre es muy legible. Else puede resolver este problema:

Ahora presionando espacio correctamente cambia MyFlag entre 0 y 1 porque el Else solo se ejecuta si el evento previo no lo hizo.

Presinando X es un keyboard shortcut para agregar un evento Else después del actualmente seleccionado evento.

Note Else No coge ningún objeto. Literalmente significa "El último evento no se ejecutó". Considera el siguiente ejemplo:

La intención puede ser la de hacer que los monstruos en la pantalla roten hacia el jugador, y hacer que el resto apunte hacia abajo 90 grados. Hay dos problemas con esto. En primer lugar, el evento Else no va a funcionar en absoluto si cualquier monstruo esta en la pantalla, debido a que el primer evento ha corrido el evento Else no. En segundo lugar, incluso si el evento Else se ejecutara no escogeria especificamente los monstruos que estan fuera de la pantalla: afecta a todos los monstruos, porque no selecciona la instancia. En este caso es mejor simplemente reemplazar el Else con una condición invertida esta en pantalla como muestra a continuación. Esto podrá tener el efecto deseado en la instancia y en las que estan fuera de la pantalla.

Else puede tambien ser encadenado con bloques "Else-if" agregando una condición extra al evento Else, y despues agregar otro evento Else despues de esto. Esto se muestra a continuación.

Esto se puede leer:

if ItemCount es 0: establecer texto a "You have no items!" (no tienes articulos)

Else if ItemCount es 1: establecer texto a "You have one item!" (tienes un articulo)

Else: establecer texto a "You have lots of items!" (tienes muchos articulos)

Esto imita las cadenas else-if de los lenguajes de programación.

While loops

Otra interesante condición de sistema es el bucle While. Los otros bucles (repeat, for, for earch) son relativamente sencillo, pero While trabaja ligeramente diferente y por eso merece su propia mención.

While se ejecuta infinitamente hasta que o bien:

- una condición siguiente se convierta en falsa, o

- La acción de sistema Stop loop es usada.

Lo más común es que se utilizará con una condición que le sigue, de este modo:

Esto seguirá moviendo el jugador 1 pixel arriba hasta que no se superponga con la tierra 'Ground'. Sucede al instante, por lo que se repetirá las veces que sean necesarias hasta que 'Is overlapping Ground' se convierta en falsa.

Ten cuidado en no crear accidentalmente bucles infinitos. Si la condicion nunca se convierte en falta durante el bucle, o la condición 'While' es usada sin la acción 'Stop loop' se colgará mientras esta en el bucle eternamente.

Bloques 'And' contra bloques 'Or'

Los eventos normales usan la lógica 'And': todas las condiciones se deben cumplir para que se ejecute la acción. En otras palabras, "condición 1 Y condición 2 Y condición 3..." tienen que ser verdaderas. En contraste, el bloque 'Or' se corre si cualquier condición es verdadera. En otras palabras, correrá si "condición 1 O condición 2 O condicion 3..." son verdaderas. Considera el siguiente ejemplo:

La intención aqui es para cualquier monstruo que este a la izquierda por X=500 o arriba Y=500. En este caso si cualquier instancia cumple cualquier condición se ejecuta el evento. Las instancias seleccionadas para el evento serán aquellas que cumplan con cualquier condición.

Note como en bloques ordinarios 'AND' condicionan subsecuentemente Filtrando instancias que no cumplen el evento - progresivamente reduciendo el número de instancias seleccionadas. En contraste el bloque 'OR' agrega instancias que cumplen el evento - progresivamente incrementando el número de instancias seleccionadas.

Por defecto los bloques de eventos son los normales tipo 'And'. Pueden ser cambiados de bloques 'And' a 'Or' haciendo click derecho al margen del evento seleccionando Make 'Or' block, o presionando Y keyboard shortcut.

Normalmente solo un disparador puede ser ubicado en un evento. Sin embargo, esto no aplica en los bloques 'Or'. Muchos disparadores pueden ser agregado al evento 'Or', y las acciones se correaron cuando cualquier disparador en el evento se dispare. Por ejemplo abajo se muestra un evento donde se reproduce un sonido si cualquier tecla A, B o C es presionada

Tenga en cuenta que, dado que los bloques normales ('And') no pueden contener múltiples disparadores, este evento no se puede volver hacia atrás a un bloque 'And' hasta que uno de los disparadores sea eliminado.

Usando subeventos puedes combinar bloques 'Or' con bloques 'And' para crear una lógica mas avenzada. Por ejemplo:

Esto reproducirá un sonido presionando A, B o C, siempre y cuando las teclas Control o Shift sean tambien presionadas. Alternativamente: "Si (A se encuentra presionada O B se encuentra presionada o C se encuentra presionada) Y (la tecla control esta presionada o la tecla Shift esta presionada): se reproduce un sonido".

Si el segundo evento no fuera un bloque 'Or' se leeria "la tecla control esta presionada Y la tecla shift esta presionada".

Por lo tanto un sonido se reproduciría si se presiona Control + Shift y se presiona A, B o C. Alternativamente "Si (A es presionado O B es presionado O C es presionado) Y (la tecla control es presionada y la tecla Shift es presionada): se reproduce el sonido". Asi que usar subeventos pueden ayudarte a crear condiciones lógicas mas avanzadas.

Otras características avanzadas útiles.

IDs únicas (UIDs) e IDs de instancia (IIDs)

UIDs y IIDs a menudo son útiles para usuarios avanzados para seleccionar instancias de forma avanzada.

Una UID puede ser usada como una "referencia" a un objeto. Una UID puede ser guardada en una variable y el objeto puede ser despues seleccionado con la condición Pick by Unique ID.

Las IIDs pueden ser usadas para traer expresiones de instancias especificas. Por ejemplo, Sprite(1).X puede ser retornar la segunda coordenada del Sprite X (Construct 2 usa indices en base cero). Para mas información ver Object expressions en el manual entrar a expressions. Los IIDs pueden tambien ser usados para seleccionar instancias usando Pick Nth instance en la condición de sistema, pero ten en cuenta que la IID no es una referencia permanente a un objeto: para eso deberia ser usada una UID en su lugar.

Para mas información ver UIDs and IIDs in the manual.

Lo mas avanzado de todo...

Si tienes experiencia previa en programación o quieres ir al próximo nivel puede usar el Javascript SDK para escribir tus propios plugins y comportamientos para Construct 2.

La página overview tiene una lista de enlaces que pueden ayudarte a aprender Javascript.

  • 0 Comments

Want to leave a comment? Login or Register an account!