Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Error al usar distance_to_object  (Leído 549 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fedex2020

  • Habitual
  • *
  • Puntos: 82
  • Mensajes: 37
    • Ver Perfil
en: Mayo 26, 2021, 03:16:04 pm
Buenas comunidad, mi problema es el siguiente, acabo de crear un enemigo al cual al acercarce el jugador dispara una flecha, el problema es que el enemigo comienza con la animación de parado, osea, esta con la image_speed a 0, coloque una variable para que al estar a cierto rango el enemigo dispare y se pueda apreciar la animación de cuando lanza la flecha, dejo el codigo de ejemplo...
EVENTO CREATE:
image_speed = 0;
image_index = 0;
ataca = true;
EVENTO STEP
if instance_exists(obj_Seiya)
{
if (distance_to_object(obj_Seiya) < 100) && (ataca = true)
{
    image_speed = 1.2;
    if (image_index = 3)
    {
        flecha = instance_create_depth(x,y,-1,obj_Enemigo_Flecha_Izq);
        image_index = 0;
        image_speed = 0;
        ataca = false;
    }
   
    alarm[0] = 150;
}
}
ALARMA
ataca = true;

El problema es el siguiente, el jugador al acercarce al enemigo, el enemigo dispara la flecha correctamente, pero si me muevo un poco acercandome al rango <100 y  me alejo rapidamente, el enemigo queda repitiendo la animación una y otra vez y no dispara la flecha nunca tampoco....

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Void

Respuesta #1 en: Mayo 27, 2021, 06:36:35 am
Cambia el código de manera que el enemigo regrese a su estado actual si el jugador no esta en rango, o que cuando empiece a lanzar una flecha tenga que lanzar la flecha si o si.

Para la primera opción simplemente agrega  un else al if de distance_to_object que regrese image_speed y index a 0.

if instance_exists(obj_Seiya)
{
if (distance_to_object(obj_Seiya) < 100) && (ataca = true)
{
    image_speed = 1.2;
    if (image_index = 3)
    {
        flecha = instance_create_depth(x,y,-1,obj_Enemigo_Flecha_Izq);
        image_index = 0;
        image_speed = 0;
        ataca = false;
    }
   
    alarm[0] = 150;
}
else{
image_index = 0;
image_speed = 0;
}
}


Para la segunda solo agrega una comprobación de la velocidad del sprite al if de distance_to_object:

if instance_exists(obj_Seiya)
{
if ((distance_to_object(obj_Seiya) < 100) || (image_speed != 0)) && (ataca = true)
{
    image_speed = 1.2;
    if (image_index = 3)
    {
        flecha = instance_create_depth(x,y,-1,obj_Enemigo_Flecha_Izq);
        image_index = 0;
        image_speed = 0;
        ataca = false;
    }
   
    alarm[0] = 150;
}
}

 
Los siguientes usuarios dieron las gracias a este tema: fedex2020