Septiembre 15, 2020, 10:47:16 PM Ultima modificación: Septiembre 16, 2020, 01:27:32 AM por Bangaran
Hola amigos tengo una barra de vida para los enemigos

Es el mismo enemigo por ende el mismo objeto
pero cuando ataco a uno de ellos !! la barra se les baja a todos

que podria hacer para que no me suceda eso

coloco el codigo con el que gestiono la parte de la vida y de la barra de vida del enemigo

CREATE
[gml]Create
///Inicializacion
event_inherited();

enum es {
    parado = serpienteParado,
    corriendo = serpienteCorriendo,
    atacando = serpienteAtacando,
    muriendo = serpienteMuriendo
}

dir = "abajo";          //Direccion miramos por defecto
estado = es.parado;     //Estado por defecto
//vida = 10;               //Vida por defecto

radio_ataque = 18;      //Radio para empezar a atacar
crear_ataque = true;    //Crea el ataque
perseguir = false;      //Enemigo nos persige

//Codigo para caminata aleatoria
dx = -1; // Destino X al que se moverá el conejo, -1 = ninguno
dy = -1; // Destino Y al que se moverá el conejo, -1 = ninguno

alarm[0] = room_speed * choose(1,2,3);      //Para generar nueva posicion

//vida enemigo
vida = 10;              //Vida por defecto
vidaMaxE = vida;

//variables del contador
LongitudE = 40;          //longitud del contador
CalibreE = 0;            //valor del contador

//regeneracionVidaPlayer = 0;     //tiempo regenarion vida[/gml]


STEP
[gml]///Gestión de estado de movimiento, dirección y muerte
//Determinamos direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//Si no estamos atacando comprovamos estados parado y caminar
if (estado != es.atacando){
    if (dir != "") estado = es.corriendo;
    if (vh == 0 and vv == 0) estado = es.parado;
}
//Y si estamos atacando nos paramos
else {

    vh = 0;
    vv = 0;

    //Arreglar direccion solo si atacamos
    grados = point_direction(x,y,obj_player.x,obj_player.y);
    if (grados < 45 or grados > 315) dir = "derecha";
    else if (grados >= 45 and grados < 135) dir = "arriba";
    else if (grados >= 135 and grados < 225) dir = "izquierda";
    else if (grados >= 225 and grados <= 315) dir = "abajo";
}

//Comprobar vida y muerte (prioridad)
if (vida <= 0) {
    estado = es.muriendo;
    colision = false;
    vh = 0;
    vv = 0;
}
//-----------------------------------------------------------------------------------------------------
///Gestion valor y regeneracion de la vida
if (instance_exists(obj_serpiente)){
   CalibreE = round((obj_serpiente.vida * LongitudE) / obj_serpiente.vidaMaxE);
}[/gml]

DRAW GUI
[gml]///Dibuja barra vida
draw_sprite_stretched(spr_barraVida, 1, x-22, y-32, LongitudE, 7);//fondo del contador
draw_sprite_stretched(spr_barraVida, 0, x-22, y-32, CalibreE, 7);//contador
[/gml]