Bienvenidos sean a este post, en el post anterior creamos el objeto que sera el jefe pero hoy nos centraremos en terminar los ultimos detalles para implementarlo.
Ante todo debemos ir al objeto del jefe, obj_Jefe, y agregaremos un nuevo tipo de evento llamado User Events, estos tienen la particularidad de ser eventos definidos por nosotros, por ejemplo nosotros tenemos el evento Create que se ejecutara siempre que se haga una nueva instancia del objeto pero el User event se ejecutara solo cuando nosotros lo informemos como por ejemplo cuando la instancia recibe un impacto, el unico inconveniente es que solamente podemos manejar 16 de estos eventos asi que se deben gestionar con responsabilidad, con esto comentado continuemos con el proyecto.
Vamos al objeto y agregamos un nuevo evento de Other -> User Event -> User Event 0, con el nuevo evento creado le introduciomos el siguiente codigo:
if (alarma_num > 60)
{
alarma_num -= 5;
}
En este condicional verificamos si alarma_num es mayor a 60 lo decrementaremos en 5 por cada vez que sea llamado este evento, esto hara que se aumente la frecuencia de disparo o de lanzar enemigos, para nuestra siguiente modificacion debemos ir al objeto que controla el laser del jugador, obj_laser_jugador, iremos al evento Step y modificaremos el siguiente condicional:
if (toque_enemigo != noone)
{
toque_enemigo.ps -= 5;
instance_destroy();
}
De la siguiente manera:
if (toque_enemigo != noone)
{
toque_enemigo.ps -= 5;
if (object_get_name(toque_enemigo.object_index) == "obj_Jefe")
{
if (toque_enemigo.ps == 100)
{
with(toque_enemigo)
{
path_start(path_jefe, 6, path_action_restart, 0);
}
}
with(toque_enemigo)
{
event_perform(ev_other, ev_user0);
}
}
instance_destroy();
}
En este caso agregamos un condicional donde verificamos por medio de object_get_name y de object_index si la instancia en toque_enemigo es igual a obj_Jefe, el nombre que le asignamos al objeto, en caso de ser verdadero verifica el valor de ps en esta instancia si es igual a 100, ni mas ni menos, y en caso de cumplirse utilizamos un with con la instancia en toque_enemigo y por medio de path_start iniciamos el andar de nuestro jefe, veamos la descripcion de cada uno de los parametros:
- El primero sera el path que usaremos
- El segundo es la velocidad que tendra
- El tercero es para la conducta que debe tomar cuando llegue al final
- El cuarto es para indicar si debe usar el valor absoluto o relativo con respecto al path
El primer parametro es el mas sencillo, el segundo tendra relacion con respecto a la velocidad que definimos al momento de crear el path, en este parametro pasamos la velocidad que tendra con respecto al room pero en el path definimos del total de la velocidad que porcentaje vamos a usar, es decir en lugar de usar el 100% usaremos el 75%, en el tercer parametro cuando nos referimos a la conducta estamos hablando de que hacer cuando llegue al final del recorrido, para este usamos una constante pero disponemos de varias:
Constante | Descripcion |
path_action_stop | Se detiene al final del camino |
path_action_restart | Continua con el path y salta a comienzo en caso de no estar tildado closed |
path_action_continue | Continua desde la posicion actual |
path_action_reverse | Vuelve al comienzo en reversa |
En el caso del ultimo parametro es para indicar si debe respetar el path de manera absoluta con el valor de true, es decir que nuestro objeto respetara el camino establecido, en cambio con el relativo (false) toma un valor aproximado de la ubicacion del objeto y el camino, lo acomoda y lo ejecuta, despues del condicional tenemos otro with para la instancia en toque_enemigo donde ejecutaremos el evento que creamos anteriormente, es decir aqui tenemos cubierto el inicio del movimiento de nuestro jefe y el decremento para la demora de la aparicion de nuestros enemigos y misiles, con esto tenemos cubierto el como moverlo y como incrementar la dificultad a medida que recibe daño pero nos resta agregar el objeto pero para ello haremos algo especial.
Para esto saldremos del objeto del jefe y volveremos al objeto que usabamos para controlar la creacion de nuestros enemigos, obj_control, iremos al evento Create y agregaremos la siguiente linea:
pasos = 0;
Esta sera una variable que usaremos para contar los pasos de nuestro room y debemos agregarlo antes del llamado al evento Alarma 0, para entender el porque necesitamos esta variable debemos ir justamente a este evento (Alarm 0) donde tenemos el condicional para crear las naves enemigas al azar, la linea del condicional:
if (instance_exists(obj_Nave))
La modificaremos de la siguiente manera:
if (instance_exists(obj_Nave) && !instance_exists(obj_Jefe)
&& pasos < 1800)
En este condicional no solamente seguiremos verificando si existe la nave sino que tambien verificamos si no existe la instancia del jefe y pasos sea menor a 1800, si todo esto se cumple ejecutaremos el bloque de creacion de enemigos que teniamos anteriormente pero despues de este bloque agregaremos el siguiente bloque:
else if (instance_exists(obj_Nave) && instance_exists(obj_Jefe))
{
instance_create_depth(0,0,0,obj_Enemigo);
instance_create_depth(1024,0,0,obj_Enemigo);
}
En este caso verifica si solo existen la instancia de la nave y la del jefe, en caso de ser verdadero dejara de crear oleadas de enemigos y solamente creara dos que saldran de las dos puntas de la pantalla, con esta modificacion el condicional quedara de la siguiente manera:
if (instance_exists(obj_Nave) && !instance_exists(obj_Jefe)
&& pasos < 1800)
{
switch(irandom(2))
{
case 0:
instance_create_depth(32,0,0,obj_Enemigo);
instance_create_depth(160,16,0,obj_Enemigo);
instance_create_depth(256,0,0,obj_Enemigo);
instance_create_depth(384,32,0,obj_Enemigo);
instance_create_depth(480,0,0,obj_Enemigo);
break;
case 1:
instance_create_depth(0,128,0,obj_Enemigo);
instance_create_depth(128,0,0,obj_Enemigo);
instance_create_depth(256,32,0,obj_Enemigo);
instance_create_depth(544,0,0,obj_Enemigo);
instance_create_depth(544,64,0,obj_Enemigo);
break;
case 2:
instance_create_depth(32,224,0,obj_Enemigo);
instance_create_depth(128,32,0,obj_Enemigo);
instance_create_depth(256,96,0,obj_Enemigo);
instance_create_depth(384,32,0,obj_Enemigo);
instance_create_depth(544,224,0,obj_Enemigo);
break;
}
}
else if (instance_exists(obj_Nave) && instance_exists(obj_Jefe))
{
instance_create_depth(0,0,0,obj_Enemigo);
instance_create_depth(1024,0,0,obj_Enemigo);
}
Con esto tenemos una nueva variante de como trabajar con nuestro objeto jefe, en este caso usamos a pasos para hacer como un retardo para la creacion de nuestro jefe porque en la primera condicion al verificar que este no existe y que pasos sea menor a 1800 determina que el mismo no existira durante este tiempo pero el bloque else que agregamos equivale a decir que ya pasos supero los 1800 y que ambas instancias existen por lo tanto no se necesita esa oleada de enemigos y lo reemplazamos por solamente dos para ayuda al jefe pero nos faltan dos detalles; la creacion de la instancia del jefe y el incremento de pasos y para ello debemos crear un nuevo evento de tipo Step, con este evento creado le agregaremos el siguiente codigo:
++pasos;
if (pasos == 1800)
{
instance_create_depth(512, 0, 0, obj_Jefe);
}
En la primer linea incrementaremos el valor de pasos por cada uno que demos, luego tenemos un condicional donde verifica si pasos es igual a 1800 y en caso de ser verdadero procede a crear la instancia del jefe, con esta ultima modificacion tenemos completo a nuestro jefe, podemos probar de compilarlo para ver como esta trabajando hasta ahora mediante el siguiente video
En el video podemos observar el caos que genera ahora nuestro juego, como aparece el jefe y como despues de recibir una cierta cantidad de daño se comienza a mover para hacer mas dificil nuestra mision, solo nos restan un par de detalles para terminarlo.
En resumen, hoy hemos completado nuestro jefe, hemos creado la posibilidad de generar una demora para que el mismo aparezca, hemos creado la posibilidad de poder variar la creacion de los enemigos dependiendo si existe o no el jefe, hemos implementado el path o camino generado y tambien hemos dado un paso mas para completar nuestro juego, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
