Añadiendo funcionalidades al juego
Si describimos cada evento con mucho detalle como antes, el tutorial sería muy largo. Haremos descripciones más breves en los siguientes eventos. Recuerda los pasos para añadir una acción son:
1. Doble clis para colocar un nuevo evento o clic en el enlace Añadir acción para añadir la acción.
2. Doble clic en el objeto al que le afecta la condición/acción.
3. Doble clic en la condición/acción que quieres.
4. Escribir los parámetros si son necesarios.
En lo sucesivo los eventos se describirán como el objeto, seguido por la condición/acción seguido por algún parámetro. Por ejemplo, el evento que hemos hecho se escribiría:
Añadir condición System -> Every tick
Añadir acción player -> Set angle toward -> X: Mouse.X, Y: Mouse.Y
Conseguir que el jugador dispare
Cuando el jugador haga clic debería disparar una bala. Esto se puede hacer con la acción Spawn another object (Generar un objeto) aplicada al Jugador, que crea una instancia de un objeto con la misma posición y ángulo. El comportamiento Bullet que añadimos anteriormente le hará volar hacia delante. Haz el siguiente evento:
Condición: Mouse -> On click -> Left clicked (es el valor predeterminado)
Acción: player -> Spawn another object -> Para Object, elige bullet. Para Layer, pon 1 (la capa "Main" 1 - recuerda que Construct 2 cuenta desde cero). Deja en 0 Image point.
Tu evento debería de verse así:
Si pruebas el juego notarás que las balas salen desde el centro del jugador, en vez del extremo de la pistola. Vamos a corregirlo situando un punto de imagen (image point) al final de la pistola. Un punto de imagen es una posición en una imagen desde donde puedes realizar acciones.
Haz clic derecho en player en la barra de objeto y selecciona Edit animations (Editar animaciones).
Reaparece el editor de imagen para el jugador. Clic en el ícono de la herramienta Set origin and image points (Definir origen y puntos de imagen):
...y se abre el cuadro de diálogo puntos de imagen:
Mueve el diálogo un poco para el lado. Fíjate que en el objeto aparece un punto, éste marca el origen del objeto o en otras palabras es el "centro de giro" del mismo, si lo rotas gira sobre el origen. Ahora queremos añadir otro punto de imagen para representar la pistola, haz clic en el botón "+". Aparece un nuevo punto. Clic izquierdo al final de la pistola del jugador para situarlo allí:
Ahora cierra el editor de imágenes.
Doble clic en la acción Spawn que añadimos antes y cambia Image Point a 1. (El origen siempre es el primer punto de imagen, y recuerda que Construct siempre cuenta desde cero).
El evento debería de verse como abajo, ahora muestra Image point 1
Prueba el juego. Ahora las balas se disparan desde el final de la pistola, aunque aún no hacen nada. De todas maneras y una vez que te familiarices con el sistema de eventos podrás ponerle interactividad a cualquier elemento del juego con gran rapidez.
Ahora haremos que las balas maten monstruos. Añade el siguiente evento:
Condición: bullet -> On collision with another object -> elige monster.
Acción: monster -> Destroy
Acción: bullet -> Spawn another object -> explode, layer 1
Acción: bullet -> Destroy
En este caso agregamos 3 acciones a una sola condición, y tus eventos se deberían ver así:
El efecto explosión
Prueba el juego e intenta disparar a un monstruo. Ups, la explosión tiene un feo borde negro!
Tranquilo que el juego no quedará con esta imagen tan mala, vamos a mejorarlo. Clic en el objeto explode en la barra de Objetos en la parte inferior derecha o en la barra de Proyecto.
Sus propiedades aparecen en la barra de propiedades a la izquierda. Abajo de Effects (Efectos) sale Blend Mode (modo de mezclado), cámbialo de Normal a Additive (Aditivo). Prueba el juego de nuevo.
¿Porqué funcionó esto? Cuando Construct necesita mostrar una imagen la pega encima de la pantalla. Con el efecto Additive, cada pixel de la imagen es sumado (adicionado) al pixel que esta debajo. El negro tiene un valor de cero, asique no suma nada y por eso no se ve el borde negro. Los colores claro suman más y por eso se ven más fuertes. Esto es muy útil para explosiones o efectos de luz.
Haciendo a los monstruos un poco más listos
Por el momento los monstruos sólo pasean por fuera del layout a la derecha, vamos a hacerlos más interesantes. Para comenzar, haremos que al partir el juego se muevan en un ángulo aleatorio.
Condición: System -> On start of Layout
Acción: monster -> Set angle -> random(360)
Pero aún siguen vagando cuando salen del layout. Hay que mantenerlos dentro. Haremos que regresen hacia el jugador cuando abandonen el layout con estas dos cosas: siempre permaneceran en el layout y si el jugador se detiene, los monstruos irán hacia él!
Condición: monster -> Is outside layout
Acción: monster -> Set angle toward position -> Para X escribe player.X y para Y pon player.Y.
Prueba el juego. Si esperas un momento, te fijarás que los monstruos se mantienen en el layout y al rebotar en las paredes se orientan hacia el personaje. Es una IA (Inteligencia Artificial) escasa, pero algo es!
Ahora, supón que necesitamos disparar cinco veces para matar al monstruo en lugar de una muerte instantánea como hasta ahora. ¿Como lo hacemos? Si sólo incluímos un contador de "Salud", en vez de uno para cada monstruo, todos los monstruos morirían a la vez. En vez de eso, necesitamos que cada monstruo recuerde su propia salud. Eso lo podemos hacer con las variables de instancia.