Estoy haciendo un maze. Utilizo los eventos predefinidos y las acciones con códigos GML. Pues bien, gracias al usuario Black_Cat ya conseguí que el personaje se moviera por la cuadricula. Pero ahora, he creado a un enemigo que le pongo como acción que nos siga. Para eso utilizo en el event step:
action_potential_step(obj_heroe.x,obj_heroe.y,1,0);
Y bueno...nos sigue de una forma un poco errática. Osea, evitando los muros y tal. Pero no lo hace de 32x32. Si no, de forma mas "libre".
Cuando nosotros nos metemos entre los pasillos (ya que el maze hay espacios sin muros) al enemigo le cuesta entrar. Supongo, por no estar alineado en el grid como nosotros.
He ido probando cosas con el if y el place_snapped(32,32) pero no consigo frutos. Intentaba meter un código parecido de nuestro personaje principal al enemigo. Pero veo que no cuela... :'(
que tal si pones en el evento step la accion aling to the grid en 32x32?
Cita de: ivn_eze en Enero 04, 2014, 07:20:41 PM
que tal si pones en el evento step la accion aling to the grid en 32x32?
Pues no me funciona. Ya comento que el personaje principal ya me va bien. El problema es el enemigo que nos persigue. He puesto este code en el step del perseguidor:
if place_snapped(32,32) then
action_potential_step(obj_heroe.x,obj_heroe.y,1,0);
pero se queda inmóvil.
Y el
move_snap(32,32);
tampoco me funciona para el enemigo.
Bueno.... nose que es Maze Y_Y (No conozco muchos generos o estilos de juego)
Hace poco di un codigo para moverse en grid.... era asi:
if place_snapped(32,32)
speed=0
if place_snapped(32,32)
{
if keyboard_check_pressed(vk_left)
{direction=180 speed=2}
if keyboard_check_pressed(vk_right)
{direction=0 speed=2}
if keyboard_check_pressed(vk_up)
{direction=90 speed=2}
if keyboard_check_pressed(vk_down)
{direction=270 speed=2}
}
Si se modifica un poco puede funcionar como una IA :D
if place_snapped(32,32)
speed=0
if place_snapped(32,32)
{
if Jugador.x<x
{direction=180 speed=2}
if Jugador.x>x
{direction=0 speed=2}
if Jugador.y<y
{direction=90 speed=2}
if Jugador.y>y
{direction=270 speed=2}
}
Si tu personaje no se llama Jugador y te da gueva modificar el codigo (Como yo) coloca algo asi al inicio
Jugador=Nombre
Lo malo de ese codigo es que es simple, funciona bugeado (Para mi)
Ya que su preferiencia es ir a la izquierda, derecha, arriba y abajo..... Si quieres lo alargo y te lo doy que sea random :D
Espero y te sirva :3
Gracias por la ayuda. Lo he estado probando y se le acerca lo que busco. Aunque luego he añadido que al colisionar con los muros, el enemigo, escoja otra dirección con la función choose(dir,speed). Aunque al hacer esto, deja de perseguir al enemigo.
En todo caso, me gustaría saber utilizar la primera función que he puesto al principio del tema. Para ahorrar código y eso.
Ah, Maze significa laberinto... ;)
CitarGracias por la ayuda. Lo he estado probando y se le acerca lo que busco. Aunque luego he añadido que al colisionar con los muros, el enemigo, escoja otra dirección con la función choose(dir,speed). Aunque al hacer esto, deja de perseguir al enemigo.
si lo que quieres es que cambie de direccion al chocar, creo que tambien podrias usar esto:
es de un pacman, pero supongo que es lo mismo:
va en cada colision donde quires que esto suceda (EJ: enemigo-arbol)
{
if (hspeed == 0)
{
if (random(3)<1 && place_free(x-4,y))
{ hspeed = -4; vspeed = 0;}
if (random(3)<1 && place_free(x+4,y))
{ hspeed = 4; vspeed = 0;}
}
else
{
if (random(3)<1 && place_free(x,y-4))
{ hspeed = 0; vspeed = -4;}
if (random(3)<1 && place_free(x,y+4))
{ hspeed = 0; vspeed = 4;}
}
}
con una alarma o un timeline que haga que pasado unos segundos de la colision, vuelva a perseguirte
A ver...
El código de persecución del enemigo al personaje lo tengo en un event step.
Y el código de que el enemigo choca con el muro con un event collision.
Pues bien, comienza el nivel y los enemigos persiguen al personaje. Pero cuando estos, chocan con la pared, ya dejan de perseguirlo. El problema es que no se como configurar el event alarm. Osea, ¿El código que esta en el event step debería ponerlo en el event alarm?
También me gustaría poder aplicar la primera función que puse. Es decir, no me gusta que el enemigo nos siga copiando nuestras coordenadas. Bueno, me refiero utilizando tantos if.
CitarEl código que esta en el event step debería ponerlo en el event alarm?
no.
lo voy a poner mas facil, en una timeline.
crea una timeline,en el momento 120 (o como lo quieras tu) y pon exactamente el mismo codigo que en step.(el que hace que el enemigo te siga)
luego, de vuelta en el evento collision pon set timeline (la timeline que creaste) con start inmediately y don't loop.
tambien puedes poner algo para que cuando te alejes lo suficinte deje de perseguirte al estilo de the leyend of zelda.(aunque eso no se como se hace XD)
Este articulo tiene lo que buscas.
http://www.comunidadgm.org/articulos/pathfinding-(programaci243n)/
yo aprendi de ello y claro lo modifique luego para adactarlo a mi juego, pero igual
es una buena base para aprender.
Cita de: elviskelley en Enero 07, 2014, 05:29:40 PM
Este articulo tiene lo que buscas.
http://www.comunidadgm.org/articulos/pathfinding-(programaci243n)/
yo aprendi de ello y claro lo modifique luego para adactarlo a mi juego, pero igual
es una buena base para aprender.
Muchas gracias Elvis. Le echaré un vistazo. Saludos!