Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Momfus en Marzo 06, 2011, 07:27:22 AM

Título: Reconocer direcci?n
Publicado por: Momfus en Marzo 06, 2011, 07:27:22 AM
Hola a todos, voy a tratar de ser lo m?s claro posible de lo que trato que hacer; mi nivel en game maker a?n es bajo as? que si no entiendo algo, paciencia jeje...

Estoy haciendo un enemigo en mi juego que se mueve en una grilla 32x32 (es para el manejo de diversos objetos y no deseo cambiar eso) y quiero que se mueva libremente en el nivel esquivando las trampas y buscando a nuestro personaje para atraparlo (al colisionar con el mismo, perdemos una vida...eso ya esta echo).

Por ejemplo: Se mueve hacia abajo, y si a 64 pixeles de distancia hay un rayo que lo destruye, entonces cambia de direcci?n, y busca otro camino para alcanzarnos. Si se mueve hacia la derecha y a 64 pixeles a la derecha hay un pozo, cambia de direcci?n..etc?tera.

He visto tutoriales para hacer un comportamiento parecido a los fanstasmas de pac-man...pero es para hacer si o si juegos pac-man.

Gracias por la paciencia y la ayuda.
Título: Re: Reconocer direcci?n
Publicado por: brunoxzx en Marzo 06, 2011, 09:20:49 PM
Pues para checar la distancia puedes usar distance_to_object, te dejo un c?digo para que cambie de direcci?n si hay un objeto en la misma direcci?n que tu y a menos de 64 pixels, no se si funcione por que no mostraste tus codigos de movimiento.


[gml]while(distance_to_object(objeto)<=64 && point_direction(x,y,objeto.x,objeto.y)==direction){
direction=choose(0,90,180,270)}[/gml]
Título: Re: Reconocer direcci?n
Publicado por: Momfus en Marzo 06, 2011, 10:41:00 PM
Aca dejo algo que hice para que vean lo que necesito:

http://www.gamefront.com/files/20069988/CodeMan+-+Prueba+0.gmk


Saludos y gracias

PD: Es muy sencillo y obviamente no tiene ninguna IA, ya que es ahi donde tengo problemas....
Título: Re: Reconocer direcci?n
Publicado por: brunoxzx en Marzo 06, 2011, 11:08:47 PM
Pues usa el c?digo que te pase hace rato, solo ponlo en el evento step de tu enemigo  8).
Título: Re: Reconocer direcci?n
Publicado por: Momfus en Marzo 07, 2011, 12:06:33 AM
El problema es que se quedan dando vueltas simplemente y no buscan caminos alternativos para alcanzar al jugador.

La idea es que si aparece una trampa en su camino (como la de los pozos) busquen un camino distinto para atraparnos.
Título: Re: Reconocer direcci?n
Publicado por: brunoxzx en Marzo 07, 2011, 12:21:03 AM
Si lo que quieres es que te encuentre f?cilmente, te recomiendo usar un buen pathfinding, como este http://gmc.yoyogames.com/index.php?showtopic=286571 (http://gmc.yoyogames.com/index.php?showtopic=286571)
Título: Re: Reconocer direcci?n
Publicado por: Momfus en Marzo 07, 2011, 12:30:23 AM
No es que me encuentre facilmente, sino que vaya moviendose por el mapa esquivando las trampas y, si es posible, cuando se acerque el jugador en cierta ?rea, trate de atraparlo (no que facilmente lo encuentre, sino lo haria muy facil).

Igualmente, durante la semana ver? si puedo usar ese ejemplo y adaptarlo al juego que estoy haciendo (es lo ?ltimo que me falta para despues avanzar de forma fluida)

Cualquier ayuda bienvenida, gracias.
Título: Re: Reconocer direcci?n
Publicado por: brunoxzx en Marzo 07, 2011, 04:04:09 AM
Ah me acabo de dar cuenta de que el c?digo que te di hace rato estaba mal mejor usa este, no resolvera el problema de que busque al personaje pero al menos ya no chocara contra las trampas .
[gml]while(collision_line(x+16,y+16,x+16+lengthdir_x(26,direction),y+16+lengthdir_y(26,direction),ob_pozo,0,1)){
direction=choose(0,90,180,270)}
[/gml]
va en step
Título: Re: Reconocer direcci?n
Publicado por: Momfus en Marzo 07, 2011, 04:43:05 AM
Funciona bien..tiene algunos errores con que se superpone un poco sobre los pozos, pero ver? si puedo arreglarlo durante la semana.

Si alguno tiene una solucion con lo que busque al jugador...agradecido.

Título: Re: Reconocer direcci?n
Publicado por: brunoxzx en Marzo 07, 2011, 04:57:47 AM
si le a?ades move_snap al final se arregla (creo).
[gml]while(collision_line(x+16,y+16,x+16+lengthdir_x(26,direction),y+16+lengthdir_y(26,direction),ob_pozo,0,1)){
direction=choose(0,90,180,270) move_snap(32,32)}
[/gml]
Yo te podr?a ayudar con lo de que te medio persiga pero la verdad es algo complicado y al menos a mi me tomar?a tiempo (que no tengo en abundancia).
Título: Re: Reconocer direcci?n
Publicado por: Ge en Marzo 07, 2011, 03:04:17 PM
[gml]mp_potential_step(Jugador.x,obj_Jugador.y,4,false)[/gml]
4, indica la velocidad a la que se mueve
false, es para que choque solo con los solidos, true, para que choque con cualquier objeto

Y si queres que se alinee (Haci se dice?), usa move_snap

:)
Título: Re: Reconocer direcci?n
Publicado por: Momfus en Marzo 07, 2011, 09:29:30 PM
Bien, muchas gracias.

Para hacer que se mueva libremente por el mapa en una grilla 32x32...como har?a?