Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zHeMaa en Marzo 02, 2015, 12:59:25 AM

Título: Enemigos se quedan colisionados en la pared [SOLUCIONADO]
Publicado por: zHeMaa en Marzo 02, 2015, 12:59:25 AM
Hola buenas, como bien dice el titulo, tengo una colisión o mas bien.. un objeto llamado obj_colision puesto en solido, el problema es que los enemigos al tocar ese objeto se quedan ahí colisionados (no se pueden mover), si alguien sabe como puedo arreglar esto me haría un grandisimo favor, gracias!  :)
Título: Re:Enemigos se quedan colisionados en la pared
Publicado por: 3dgeminis en Marzo 02, 2015, 03:53:22 AM
Que codigo usas para moverlos???
Un codigo comun para mover a la derecha
if place_free(x+4,y) x+=4
Título: Re:Enemigos se quedan colisionados en la pared
Publicado por: zHeMaa en Marzo 02, 2015, 09:36:40 AM
Los muevo con "mp_potential_step", aquí te dejo el código exacto que utilizo:

mp_potential_step(obj_jugador.x,obj_jugador.y,velocidad,false);
Título: Re:Enemigos se quedan colisionados en la pared
Publicado por: penumbra en Marzo 02, 2015, 10:26:13 AM
Como indica el manual, la función trata de evitar obstáculos, pero no hay garantía de que funcione al 100%. El problema se puede resolver de distintas maneras, una de ellas, es usar un evento de colisión ENEMIGO VS OBJETO

[gml]
{
   var dir = point_direction(other.x, other.y, x, y);
   move_outside_solid(pdir, 20);                           //Alejarse del objeto sólido en la dirección contraria
}
[/gml]
Título: Re:Enemigos se quedan colisionados en la pared
Publicado por: zHeMaa en Marzo 02, 2015, 11:25:29 PM
Cita de: penumbra en Marzo 02, 2015, 10:26:13 AM
Como indica el manual, la función trata de evitar obstáculos, pero no hay garantía de que funcione al 100%. El problema se puede resolver de distintas maneras, una de ellas, es usar un evento de colisión ENEMIGO VS OBJETO

[gml]
{
   var dir = point_direction(other.x, other.y, x, y);
   move_outside_solid(pdir, 20);                           //Alejarse del objeto sólido en la dirección contraria
}
[/gml]

Funciona perfectamente, muchísimas gracias!  :)

PD: en "move_outside_solid(pdir, 20);" en vez de pdir hay que poner dir, para quien quiera utilizar también el código.