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

Favourite 264 favourites
Tutorial written by AshleyOriginally published on 13th, April 2012 - 4 revisions

Translation Team:

1 revision

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:

A bad event for playing audio.
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:

A correctly played sound effect.
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.

An incorrectly placed 'Else' condition.
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:

An incorrectly set up toggle.
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:

The fixed toggle event.
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:

A misleading use of Else.


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.

An alternative to using Else.


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.

Else-if chain.


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:

An example 'While' loop.
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:

Picking conditions in an 'Or' block.
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

An 'Or' event with triggers.
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:

An advanced 'Or' example.
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.

Unlock your full gamedev potential

Upgrade to the Personal Edition of Construct 2, it has way more features and won't holding back from making money and using your full creativity like the free edition does. It's a one off payment and all Construct 2 editor updates are free for life!

View deals

Plus, it's got a lot of additional features that will help you save time and make more impressive games!

Congratulations on finishing this tutorial!

Did you learn a lot from it? Share it now with your friends!

Share and Copy this Tutorial

You are free to copy, distribute, transmit and adapt this work with correct attribution. Click for more info.

Comments

0
ntomk16 154 rep

sorry
abuot that

Saturday, July 30, 2016 at 2:19:27 AM
0
ntomk16 154 rep
fuckyou cuant
quoted from ntomk16
Saturday, July 30, 2016 at 2:22:54 AM

Leave a comment

Everyone is welcome to leave their thoughts! Register a new account or login.