Cita de: elviskelley en Noviembre 09, 2014, 09:27:03 PM
Este tipo de ia es muy facil. ahora trabajo en un manual cuya IA tenia solo 5 fases y ya voy por 8, y se me siguen ocurriendo ideas, en fin te dije esto para que entiendas que las IA se hacen por como yo las llamo "Fases" otros les dicen "Estados"
en fin tu Ia es super sencilla, pero te lo digo a modo de que aprendas.
tu Ia debe tener varias fases, cada una de las fases activa un Script de comportamiento.
Lo principal es la primera fase que seria; "contratake" esta debe ser la primera fase pues indicas que aun si sale de su rango pero lo atacas el siga persiguiendolo a modo de contratacar.
la segunda fase seria; "rangoZona" Esta fase controlaria un rango de alejamiento de la zona inicial del enemigo, es decir cuanto podra alejarse de su hogar, o zona de resguardo, pero ignora esta fase si esta contratacando.
La tercera Fase sera; "RadioAtk" Este seria un radio de ataque o digamos de vision, si el enemigo esta cerca es decir dentro de este radio el lo seguira y atacara, pero si se aleja de la zona hogar ignora esta y activa la fase "rangoZona"
y como vez la fase rango zona es ignorada si contrataca. en pocas palabras las tres fases estan en cordinacion una a la otra.
Es de esta manera como se piensa al crear una IA.-
Ahora como llevarlo a codigo. pues veras como
claro ante todo debes haber declarado las variables de las fases en el event create.
contratake=0; rangoZona=0; RadioAtk=0;
Ahora creamos los scripts de cada fase, osea lo que va a hacer. Pero lo dejo de ultimo antes interactuamos con ellos como si los hubieras creado.
event de colision con alguna bala.
contratake=1; //la activamos para que contrataque.
event step
if contratake then {scrAtacar();}
//si esta activo contrataque va a atacar.
if (rangoZona=0 and RadioAtk=1) then {scrAtacar();}
//si no esta activo el regresar al hogar y el enemigo esta en su zona lo ataca.
if (rangoZona=1 and contratake=0) then {RadioAtk=0; scrRegresar();}
//si no contrataca y se alejo mucho de su hogar, activa el script de regresar.
//aca viste como funcionan los scripts de fases (estados) pero ahora debes crear los scripts mencionados y colocarlos.
//para verificar si se alejo del hogar "rangoZona"
if distance_to_point(xstart,ystart,x,y) > 200 then
{rangozona=1;}
//coloque 200 como distancia maxima de alejamiento pero coloca la que gustes.
//para verificar si esta en su rango de ataque.
var ene_id;
ene_id =instance_nearests(x,y,objEnemigo); //coloca el nombre del parent enemigo.
if distance_to_point(x,y,ene_id.x,ene_id.y) < 200 then
{RadioAtk=1;}
//coloque 200 como rango de vision ajustalo a gusto.
ahora solo crea los script que mencione y coloca los codigos de perseguir y dispara o regresar al inicio osea xstart y ystart. Espero entiendas saludos.
entendi todo lo de las fases y lo que explicaste y habia pensado lo mismo solo no savia como hacerlo en codigo, el codigo que pusiste lo entendi casi todo pero me da algunos errores epero me puedas contestar te mandare un mensage :-\.