Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Genesis en Noviembre 09, 2010, 02:11:23 AM

Título: Ayuuuuda! IA
Publicado por: Genesis en Noviembre 09, 2010, 02:11:23 AM
Ayudenme rapido porfavor!
he intentado por hjoras dise?ar una IA para un enemigo en un platform shooter, pero no me queda como quiero!
Quiero que patrulle y cuando el jugador lo ataque, el de una tambien lo haga y que si ve al jugador en un rango de vista opr delante lo ataque!
Ayuda porfavor!
Tengo x el mismo objeto el arma y el cuerpo(arma por evento draw y crea bakla por lenghtdir)
Gracias!
Título: Re: Ayuuuuda! IA
Publicado por: brunoxzx en Noviembre 09, 2010, 05:15:24 AM


ev create
[gml]
vel=-4 //esto es la velocidad negativos izquierda positivos derecha
seguir=0 //esto indica si debes de seguir a tu enemigo
tiempo=0 //esto es como una alarma pero desde step
[/gml]

HEHE disculpas si no esta explicado pero es que hasta yo me revuelvo cuando lo leo. eso es lo que pasa cuando intentas hacer algo comprimido  ???

ev step
[gml]
if sign(enemigo.x-x)=sign(vel){if distance_to_object(enemigo)<100{seguir=1}}else{if distance_to_object(enemigo)>100{seguir=0}}

if seguir
{if distance_to_object(enemigo)<40{/*TU CODIGO PARA DISPARAR*/}
else{if place_free(x+sign(enemigo.x-x)*abs(vel),y){x+=sign(enemigo.x-x)*abs(vel); if place_free(x+sign(enemigo.x-x)*abs(vel),y+1){if !place_free(x,y+1){vspeed=-6}}}else{if !place_free(x,y+1){vspeed=-6}}}}
else{
if tiempo<30 {tiempo+=1} else{if sign(vel){vel=-vel}else{vel=abs(vel)} tiempo=0}
if place_free(x+vel,y){x+=vel} else{if sign(vel){vel=-vel}else{vel=abs(vel)} tiempo=0}
if place_free(x+vel,y+1){if !place_free(x,y+1){vspeed=-6}}}[/gml]

bueno donde dice
tiempo<30 es el tiempo que toma en cambiar de direccion cuando esta vigilando.

donde dice if distance_to_object(enemigo)<100, es la distancia a la que debe de estar para seguirte.

donde dice if distance_to_object(enemigo)<40, es la distancia a la que deve de estar de su enemigo para disparar.

donde dice TU CODIGO PARA DISPARAR creo que sabes que poner ?no?.

todos los lugares en donde dice vspeed=-6 es la altura a la que salta.


OK lo que hace la IA (no la e probado) es si tu objeto la esta viendo a su enemigo y esta en una distancia menor a 100 lo comienza a seguir y cuando llega a una distancia menor a 40 lo deja de seguir y le dispara (tu tienes que poner el codigo de disparo). si no te ha visto se mueve a la izquierda durante 30 steps y luego a la derecha los mismos 30 steps si choca contra un muro mientras patrulla cambia de direcci?n.

La IA tambi?n salta cuando hay un oy? enfrente de ella y si hay un obst?culo tambi?n lo salta 
Título: Re: Ayuuuuda! IA
Publicado por: Genesis en Noviembre 11, 2010, 02:07:22 AM
Si no la has probado para que la pones, ademas, como asbes lo de los hoyos si no l has probado, ya la probe, y no es una IA como tal, solo se mueve de un lado al  otro y si tu te mueves el tambien, no tiene gravedad ni salta, osea, prueba todo antes de ayudar porfavor.
Título: Re: Ayuuuuda! IA
Publicado por: Hackware en Noviembre 11, 2010, 03:29:00 AM
A mi me parece que la soluci?n calza perfectamente con lo que solicitas en el post principal, as? que no tienes de qu? quejarte. A?n si el c?digo de brunoxzx no es la soluci?n definitiva a tu problema sigue siendo un buen punto de partida, no tienes derecho a restarle m?rito a su esfuerzo y solidaridad.

Ahora bien, ya que t? y s?lo t? sabes qu? tan "inteligente" debe quedar la IA y considerando que lo que pides no es tan sencillo ?porqu? no comienzas mostrando los c?digos de la IA que est?s utilizando para que podamos trabajar sobre ella?
Título: Re: Ayuuuuda! IA
Publicado por: brunoxzx en Noviembre 11, 2010, 03:42:57 AM
bueno supuse que tu le ibas a poner la gravedad y si no la prob? era por que no tenia gamemaker a la mano no por que no quisiera.
Cita de: Genesis en Noviembre 11, 2010, 02:07:22 AMcomo asbes lo de los hoyos si no l has probado
Por que yo escrib? el script ??? solo que no estaba probado.

te paso un ejemplo con la misma IA que te pase.

Edit: hehe hackware escribi? en lo que hacia el ejemplo.
Título: Re: Ayuuuuda! IA
Publicado por: Genesis en Noviembre 12, 2010, 01:13:52 AM
Ps, lo hiciste pero no lo probaste, si buen esfuerzo, pero sin gravedad como va a hcer algo el de saltos men = solo me pregutno, ok entonces aqui va mi IA.
[gml]
//Evento Create
move_speed=2
jump_speed=6
gravity_speed=0.5
shootrange=80
hitrange=1
enemy=obj_player

moving=false
right=true
enemy_unit=instance_nearest(x,y,enemy)[/gml]
[gml]
//Evento Step
if place_free(x,y+1)
{
gravity=gravity_speed
gravity_direction=270
}
if !place_free(x,y+1)
{
gravity=0
gravity_direction=0
}

if !place_free(x,y-1)
{
move_bounce_solid(false)
}

if !place_free(x+1,y)
{
move_bounce_solid(false)
}

if !place_free(x-1,y)
{
move_bounce_solid(false)
}

//Define if the enemy_unit object exists
if instance_exists(enemy)
{
enemy=instance_nearest(x,y,enemy_unit)
}

//AI
if distance_to_point(enemy_unit.x,enemy_unit.y)<=hitrange and !collision_line(x,y,enemy_unit.x,enemy_unit,obj_block,false,true)
{
hspeed=0

moving=false
}
else
{
if distance_to_object(instance_nearest(x,y,obj_robogun))<distance_to_object(enemy_unit) and hasmachinegun=false
  {
 
  move_contact_solid(point_direction(x,y,instance_nearest(x,y,obj_robogun).x,y),3)
  moving=true
}
else
{
if distance_to_point(enemy_unit.x,enemy_unit.y)<=shootrange and hasmachinegun=true and !collision_line(x,y,enemy_unit.x,enemy_unit.y,obj_block,false,true)
  {
  //shoot enemy with bow (if it has one)
  if floor(random(10))=0
   {
   instance_create(x,y,obj_robobullet)
  }
  moving=false
}
else
  {
  if distance_to_point(enemy_unit.x,y)>hitrange
   {
   move_contact_solid(point_direction(x,y,enemy_unit.x,y),3)
   moving=true
   if speed=0
    {
    if !place_free(x+move_speed*5,y) or !place_free(x-move_speed*5,y)
     {
     vspeed=-jump_speed
    }
    else
     {
     hspeed=0
     moving=false
    }
   }
  }
}
}
}

if x<enemy_unit.x
{
image_xscale=1
right=true
}
else
{
if x>enemy_unit.x
  {
  image_xscale=-1
  right=false
}
}

[/gml]
[gml]
//Collision Con Solido
vspeed=0[/gml]
Título: Re: Ayuuuuda! IA
Publicado por: brunoxzx en Noviembre 12, 2010, 02:47:40 AM
y bien que es lo que pasa con esa IA (no la e le?do)? y ?que tiene de malo la m?a?
Título: Re: Ayuuuuda! IA
Publicado por: Genesis en Noviembre 13, 2010, 03:59:27 AM
Lo malo es uqe no se puede configurar para cambiar los sprites, y que conserva tu distancia hacita ti, si te mueves el tiene la misma velocdiad que tu asi la cambies.
La tuya lo de los saltos y que si no la pones sobre el piso, no sirve, se queda en el aire dando vueltas.
Título: Re: Ayuuuuda! IA
Publicado por: LigTopet en Noviembre 13, 2010, 04:14:43 AM
Tal como te han dicho, ya te han dado codigos con un muy buen punto de partida:

Cita de: Hackware en Noviembre 11, 2010, 03:29:00 AM
A mi me parece que la soluci?n calza perfectamente con lo que solicitas en el post principal, as? que no tienes de qu? quejarte. A?n si el c?digo de brunoxzx no es la soluci?n definitiva a tu problema sigue siendo un buen punto de partida, no tienes derecho a restarle m?rito a su esfuerzo y solidaridad.

Ahora lo que tu dices de que no se pueden cambiar los sprites, todo codigo puede adaptarse, simplemente depende de que tanto quieras hacer tu.
En el tema has pedido una IA y creo que se te esta ayudando en eso.

Saludos