Marzo 21, 2016, 01:50:19 AM Ultima modificación: Marzo 21, 2016, 07:56:13 PM por desplo
Tengo 2 instancias de un mismo objeto (humano) y 2 instancias de otro (zombie).

Tengo lo siguiente en el objeto humano:
[Collision con zombie]
atacar = true
sprite_index = spr_atacar


Y con el objeto zombie:
[Collsion con humano]
if other.atacar = true{
atacar = true
sprite_index = spr_atacar_z
}


[Step]
if atacar = false{
x+=1
}


Lo que quiero hacer es que un zombie se ataque con un humano, pero si un humano ya esta atacando que ese otro zombie solo lo ignore y siga avazando

El código que tienes debería funcionar, peeeero, hay algo que falta.
Al momento de que el humano colisione con el zombie, su variable atacar se activa. Pero, ¿Cuándo se desactiva?
Lo mejor en esos casos sería, en vez de usar un evento collision, usar funciones de colisión en su evento step, algo así:
[gml]
//Reemplazo del evento colision con zombie del humano, evento step
if place_meeting(x, y, zombie)
{
atacar = true;
sprite_index = spr_ataca;
}
else
{
atacar = false;
x += 1;
sprite_index = spr_no_ataca;
}
[/gml]
No lo he comprobado, ni estoy seguro de si funciona.
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Marzo 21, 2016, 02:19:25 AM
El código que tienes debería funcionar, peeeero, hay algo que falta.
Al momento de que el humano colisione con el zombie, su variable atacar se activa. Pero, ¿Cuándo se desactiva?
Lo mejor en esos casos sería, en vez de usar un evento collision, usar funciones de colisión en su evento step, algo así:
[gml]
//Reemplazo del evento colision con zombie del humano, evento step
if place_meeting(x, y, zombie)
{
atacar = true;
sprite_index = spr_ataca;
}
else
{
atacar = false;
x += 1;
sprite_index = spr_no_ataca;
}
[/gml]
No lo he comprobado, ni estoy seguro de si funciona.

Tienes mucha razon. pero lastimosamente aun sigue sin hacer lo que yo necesito.

La segunda instancia del zombie sigue atacando al primer humano en vez del segundo. Osea se ve a 2 zombies atacando a 1 humano y deberia ser 2 humanos contra 2 zombies   :-X

Se me ocurre esto, sólo se usarían los eventos Step de los dos objetos
[gml]
///STEP (humano)

if( atacar == false ) //si no ataca
{
    z = instance_place( x,y, obj_zombie ); //buscar colision
    if( z <> noone ) //si existe colision
    {
        atacar = true; //activar ataque
        sprite_index = spr_atacar;
       
        with( z ) //con el zombie
        {
            atacar = true; //tambien se activa el ataque
            sprite_index = spr_atacar_z;
        }
    }   
    // otras acciones cuando no ataca ...
}

if( atacar = true ) //si ataca
{
    if not place_meeting( x,y, z ) //y ya no hay colision
    {
        atacar = false; //desativar ataque
        with( z ) atacar = false; //en las dos instancias
    }
    // otras acciones cuando ataca ...
}
[/gml]
[gml]
///STEP (zombie)
if atacar == false{
x+=1
}
[/gml]

Cita de: Clamud en Marzo 21, 2016, 04:13:03 PM
Se me ocurre esto, sólo se usarían los eventos Step de los dos objetos
[gml]
///STEP (humano)

if( atacar == false ) //si no ataca
{
    z = instance_place( x,y, obj_zombie ); //buscar colision
    if( z <> noone ) //si existe colision
    {
        atacar = true; //activar ataque
        sprite_index = spr_atacar;
       
        with( z ) //con el zombie
        {
            atacar = true; //tambien se activa el ataque
            sprite_index = spr_atacar_z;
        }
    }   
    // otras acciones cuando no ataca ...
}

if( atacar = true ) //si ataca
{
    if not place_meeting( x,y, z ) //y ya no hay colision
    {
        atacar = false; //desativar ataque
        with( z ) atacar = false; //en las dos instancias
    }
    // otras acciones cuando ataca ...
}
[/gml]
[gml]
///STEP (zombie)
if atacar == false{
x+=1
}
[/gml]

Exactamente es lo que queria!

Muchas gracias  :D :D :D