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!
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
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.
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?
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.
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]
y bien que es lo que pasa con esa IA (no la e le?do)? y ?que tiene de malo la m?a?
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.
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