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.
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