Hola como estan todos.
Tengo problemas en crear un sistema de atrapado, me explico.
Tengo al jugador ya programado, se puede mover y esconder en ciertos lugares como debajo de un sillon o de una mesa y todo bien pero al crear la IA del enemigo no me sale.
Tengo la animacion del enemigo puede caminar, correr y matarte pero no se como programar para que camine y actur como una persona que camine se detenga y siga pero que no tenga un patron a seguir, también que a un cierto rango de distancia
Te empieze a seguir corriendo y si colisiona contigo te mate.
He tratado de hacer esto pero no me sale.
Tengo una variable llamado global.escondido, esta variable puede ayudar en que si estoy escondido no me puede atrapar.
Por favor ayuda.
¿Has visto cómo se hacen los huevos revueltos? Bueno, pues de esa misma forma quedó tu post desde la tercera hasta la penúltima línea XD
¿Qué te entendí? La penúltima línea, creo que quieres hacer algo similar a esto:
(https://i.gyazo.com/37f5c15d6ae1a7a903451df4cdb2d9ae.gif)
¿Cómo lo haces? Pues nunca lo he hecho, pero podrías intentar usar una collision_line() para saber si hay algún "obstáculo" entre el "malo" y el "bueno", y de ser así, que el malo no siga al bueno porque "no lo ve", como se muestra en el GIF
Hacer una IA de ese tipo no es tan difisil, pero deberias ser mas especifico
¿Que es lo que no te sale exactamente?
¿Son las colisiones, los movimientos?
¿Te tira errores de compilación?
deberias de poner el código para que te puedan ayudar a hallar el fallo...
Cita de: NiuWeb en Febrero 07, 2016, 01:19:24 AM
¿Has visto cómo se hacen los huevos revueltos? Bueno, pues de esa misma forma quedó tu post desde la tercera hasta la penúltima línea XD
¿Qué te entendí? La penúltima línea, creo que quieres hacer algo similar a esto:
(https://i.gyazo.com/37f5c15d6ae1a7a903451df4cdb2d9ae.gif)
¿Cómo lo haces? Pues nunca lo he hecho, pero podrías intentar usar una collision_line() para saber si hay algún "obstáculo" entre el "malo" y el "bueno", y de ser así, que el malo no siga al bueno porque "no lo ve", como se muestra en el GIF
Bueno perdon por que no se entendiera no sabia como decirlo de mejor manera.
Primero mi juegos es un plataformas en 2D y el jugador como es obvio se mueve solo de derecha a izquierda.
Segundo: La IA del enemigo es lo que me importa programar.
Tercero: Necesito que el enemigo se mueva de derecha a izquierda y que cuando te vea ha cierta distancia cambie de sprite al de correr y la velocidad aumente y si te atrape se termine el juego game over.
Cuarto: Dije lo de la variable global.escondido porque al apretar la letra Z en un escondite se esconde el personaje y la variable se activa para que el enemigo no te pueda ver porque estas escondido.
Ejemplos de lo que te digo son:
Uncanny Valley. (en algunos nivel te puedes esconder de los enemigos)
Orphan. (en youtube en el canal se llama windy hill studio y puedes ver en el video llamado game play demostration como se esconde)
Espero y me haya explicado bien. Saludod
Cita de: woolf7 en Febrero 07, 2016, 03:39:50 AM
Hacer una IA de ese tipo no es tan difisil, pero deberias ser mas especifico
¿Que es lo que no te sale exactamente?
¿Son las colisiones, los movimientos?
¿Te tira errores de compilación?
deberias de poner el código para que te puedan ayudar a hallar el fallo...
Bueno elimine el codigo pero me acuerdo que puse.
Tengo al enemigo en un sprite que esta parado y en el evento create tengo esto:
Sprite_index = spr_quieta //Es una mujer XD
Image_speed = 0.3
alarm[0]=90
Dir = 1 //esta variable indica para donde mira
Evento alarm0:
//No se ha dado cuenta de tu presencia
Sprite_index = spr_enemigacamina
Image_speed = 0.9
Image_xscale = 1
Speed = 2
Dir = 1
Evento alarm 1
Sprite_index = spr_enemigacamina
Image_speed = 0.9
Image_xscale =-1
Speed = - 2
Dir = 2
Evento colision con el objeto obj_blockder
Alarm[1] = 1
Evento colision con el objeto obj_blockizq
Alarm[0] = 1
Todo eso es para que camine pero no se que hacer para que cuando te vea te persiga y si colisiona con el personaje se acabe el juego.
No me voy a leer tu código porque me quedo ciego, ¿Por qué no encierras tu código con las etiquetas [gml] y [/gml] para no quedar ciego leyéndolo? XD
Bueno, las collision_line() siguen funcionando para lo que quieres, podrías hacer esto:
[gml]
var distancia = 128; //La distancia a la que podrá "ver" al jugador, este número quiere decir que podrá ver al jugador a 128px a la izquierda o a la derecha
var jugador = obj_jugador; //El objeto jugador xD
if jugador.x < x //Si el jugador está a la izquierda del enemigo
{
if collision_line(x,y,x-distancia,jugador,false,true) //Si "ve" al jugador
{
speed = -10; //Sale corriendo a la izquierda con una velocidad de 10
sprite_index = spr_izquierda_corriendo; //Se cambia el sprite al de correr a la izquierda
}
}
else //de lo contrario
{
if collision_line(x,y,x+distancia,jugador,false,true) //Si "ve" al jugador
{
speed = 10; //Sale corriendo a la derecha con una velocidad de 10
sprite_index = spr_derecha_corriendo; //Se cambia el sprite al de correr a la derecha
}
}
[/gml]
No te voy a decir en qué objeto va este código, eso te lo dejo a tí de tarea. Lo que si te digo es que va en un evento que se ejecute contínuamente, a ver si le pillas :B
Cita de: NiuWeb en Febrero 07, 2016, 04:02:51 PM
No me voy a leer tu código porque me quedo ciego, ¿Por qué no encierras tu código con las etiquetas [gml] y [/gml] para no quedar ciego leyéndolo? XD
Bueno, las collision_line() siguen funcionando para lo que quieres, podrías hacer esto:
[gml]
var distancia = 128; //La distancia a la que podrá "ver" al jugador, este número quiere decir que podrá ver al jugador a 128px a la izquierda o a la derecha
var jugador = obj_jugador; //El objeto jugador xD
if jugador.x < x //Si el jugador está a la izquierda del enemigo
{
if collision_line(x,y,x-distancia,jugador,false,true) //Si "ve" al jugador
{
speed = -10; //Sale corriendo a la izquierda con una velocidad de 10
sprite_index = spr_izquierda_corriendo; //Se cambia el sprite al de correr a la izquierda
}
}
else //de lo contrario
{
if collision_line(x,y,x+distancia,jugador,false,true) //Si "ve" al jugador
{
speed = 10; //Sale corriendo a la derecha con una velocidad de 10
sprite_index = spr_derecha_corriendo; //Se cambia el sprite al de correr a la derecha
}
}
[/gml]
No te voy a decir en qué objeto va este código, eso te lo dejo a tí de tarea. Lo que si te digo es que va en un evento que se ejecute contínuamente, a ver si le pillas :B
Gracias por ayudarme NiuWeb y también por el consejo de poner el código bien es que no lo sabia.