Estoy haciendo un juego TPS 2D de un jugador, y como todo buen juego de su género hay una buena "inteligencia artificial" que hace que los enemigos salten plataformas, caminen autónomamente y te ataquen como buenos contrincantes. En mi juego usas una tortuga-ametralladora, algo totalmente normal. Los enemigos son abejas con pistolas (también muy normal), su sistema de inteligencia artificial (muy entre comillas) consta de lo siguiente: tienen gravedad y chocan con el suelo, lo básico. Persiguen al jugador a un paso no muy veloz para que puedas huir con facilidad; hay pequeñas plataformas que el jugador puede trepar con facilidad, al igual que el enemigo gracias a un sistema en el que hay un bloque oculto que lo hace saltar. la presencia del problema se hace notar cuando, extrañamente, el enemigo al terminar el path se teletransporta a x=0,y=0 (Esquina superior izquierda), y acto seguido repite el path (salta de nuevo) y cae al suelo, como si nada hubiera pasado. ¿Cómo puedo solucionar este extraño error?
(http://i.imgur.com/dhxuGYM.png)
Retiré los views del room para que se puediera apreciar como esa abeja tonta de la pistola se teletransporta brujílmente hasta allá arribota :'( :'( :'(
lo primero de todo, no te recomiendo en absoluto usar path en los enemigos, en especial si pretendes que siga al jugador, y por otro lado, lo que hace tu abeja con pistola, debe ser un mal uso de tu path, te recomiendo que repases esta página si insistes en usar paths: http://www.dazlog.com/manual_GM/Paths_GML.htm
Cita de: kostra en Noviembre 15, 2014, 03:33:40 AM
lo primero de todo, no te recomiendo en absoluto usar path en los enemigos, en especial si pretendes que siga al jugador, y por otro lado, lo que hace tu abeja con pistola, debe ser un mal uso de tu path, te recomiendo que repases esta página si insistes en usar paths: http://www.dazlog.com/manual_GM/Paths_GML.htm
¿Cómo me recomiendas crear la inteligencia artificial? Gracias.
Bueno La IA Es Mi Especialidad si tu juego usa bloque y quieres que los salten al momente de chocar con ellos y una buena ia seria mas o menos asi
Primero Hase El codigo de Gravedad o si ya lo tienes no
OJO Todo esto va en el step
gravity_direction=270;
if (place_free(x,y+1))gravity=0.8
else
gravity=0;
Hases otro codo en el step Que Sera la IA
Aqui Pones La Velocidad De la Abeja
vel=2.5;
//Common1 Aqui Dice que seguira al jugador por ejemplo Zoro y dice tambien que lo seguira a 350 steps si bajas el 350 a 250 sera meno distancia de seguimiento
if(distance_to_object(Zoro)<350)
{
if(x<Zoro.x){
hspeed=vel;
//Aqui Dice la Imagen Que Usa Para Caminar
sprite_index=FriezaWalk; image_xscale=1; image_speed=.3;
}
//Aqui Camina En reversa
if(x>Zoro.x){
hspeed=-vel;
//El image_xscale Significa Que el sprite sera volteado horizontal Siginifica del otro Lado
sprite_index=FriezaWalk; image_xscale=-1; image_speed=.3;
}
}
// Aqui Es Cuando Da El Salto__ Donde Dice bloque pon el objecto solido y vspeed es cuando quieres que salte puede modificar
if(place_meeting(x+48,y,Bloque) and hspeed=vel ){
vspeed=-11;
}
if(place_meeting(x-48,y,Bloque) and hspeed=-vel ){
vspeed=-11;
}
//Esto Es Si No tienes un codigo para que dispare
//Enemigo Ataca
if distance_to_object(Zoro)<150
{
//El Random Es PARA Que no dispare todas las balas de un disparo tu puedes poner variables
if(random(30)<=1)
{
if(instance_exists(self)) && Frieza.image_xscale=1 {instance_create(x+70,y+10,BalaMarine)}
if(instance_exists(self)) && Frieza.image_xscale=-1 {instance_create(x-70,y+10,BalaMarine)}
golpeado=true;
image_speed=.4;
sprite_index=FriezaDisparando
sound_play(Disparo);
alarm[0]=15;
}
}
Y en el alarma pones lo siguiente
sprite_index=FriezaWalk;
image_speed=.3;
Si Hay Un Error ME dices esque no manejo mucho las plataformas
Cita de: Hermoduro en Noviembre 15, 2014, 06:40:59 PM
Bueno La IA Es Mi Especialidad si tu juego usa bloque y quieres que los salten al momente de chocar con ellos y una buena ia seria mas o menos asi
Primero Hase El codigo de Gravedad o si ya lo tienes no
OJO Todo esto va en el step
gravity_direction=270;
if (place_free(x,y+1))gravity=0.8
else
gravity=0;
Hases otro codo en el step Que Sera la IA
Aqui Pones La Velocidad De la Abeja
vel=2.5;
//Common1 Aqui Dice que seguira al jugador por ejemplo Zoro y dice tambien que lo seguira a 350 steps si bajas el 350 a 250 sera meno distancia de seguimiento
if(distance_to_object(Zoro)<350)
{
if(x<Zoro.x){
hspeed=vel;
//Aqui Dice la Imagen Que Usa Para Caminar
sprite_index=FriezaWalk; image_xscale=1; image_speed=.3;
}
//Aqui Camina En reversa
if(x>Zoro.x){
hspeed=-vel;
//El image_xscale Significa Que el sprite sera volteado horizontal Siginifica del otro Lado
sprite_index=FriezaWalk; image_xscale=-1; image_speed=.3;
}
}
// Aqui Es Cuando Da El Salto__ Donde Dice bloque pon el objecto solido y vspeed es cuando quieres que salte puede modificar
if(place_meeting(x+48,y,Bloque) and hspeed=vel ){
vspeed=-11;
}
if(place_meeting(x-48,y,Bloque) and hspeed=-vel ){
vspeed=-11;
}
//Esto Es Si No tienes un codigo para que dispare
//Enemigo Ataca
if distance_to_object(Zoro)<150
{
//El Random Es PARA Que no dispare todas las balas de un disparo tu puedes poner variables
if(random(30)<=1)
{
if(instance_exists(self)) && Frieza.image_xscale=1 {instance_create(x+70,y+10,BalaMarine)}
if(instance_exists(self)) && Frieza.image_xscale=-1 {instance_create(x-70,y+10,BalaMarine)}
golpeado=true;
image_speed=.4;
sprite_index=FriezaDisparando
sound_play(Disparo);
alarm[0]=15;
}
}
Y en el alarma pones lo siguiente
sprite_index=FriezaWalk;
image_speed=.3;
Si Hay Un Error ME dices esque no manejo mucho las plataformas
Muchas gracias por tomarte tu tiempo en darme tu código :D
Evidentemente tu método es mucho mejor que el mío, pero sí, tengo un error. No soy muy bueno (ni siquiera un poco) usando GML, por eso se deben mis errores :-[
El error me dice "Unknown variable image_xscale"
Olvídalo, fue un error mío, lo he solucionado. ¡Me salvaste la vida! :'D
Jejejejje Apenas Te andaba respondiendo jejejeje :-[
Y Que tal Como Te fue Te Puedo Ayudar enalgo mas