Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: juan pablo en Junio 06, 2010, 07:27:40 PM

Título: ?como hacer una ia de un tanque??????????? (solucionado)
Publicado por: juan pablo en Junio 06, 2010, 07:27:40 PM
alguien sabe????? :-\  :-\ :-\
Título: Re: ?como hacer una ia de un tanque???????????
Publicado por: DarkKRuleR en Junio 06, 2010, 07:52:35 PM
asi en general es complicado... seguramente, ser? vista cenital, tendr?s que hacer algo como checar que entre el tanque y el personaje no haya walls

if !collision_line(x,y,obj_P.x,obj_P.y,obj_wall,1,1);
donde obj_P es el personaje

y estando localizado, se deber?a mover hacia t?, con un move_towards_point
pero claro, deber?a girar hacia ti, usando el point_direction para calcular en angulo entre en tanque y el personaje, para girar el tanque con image_angle, solo en PRO... pero por dos partes, ya uqe seguramente sea la torreta y la parte de abajo, dos objetos, la torreta giraria mas rapido y el tanque mas lento... una pregunta muy general xD
Título: Re: ?como hacer una ia de un tanque???????????
Publicado por: Genesis en Junio 08, 2010, 12:47:39 AM
Bueno bueno, primero que todo tienes el sprite de la turret(parte donde esta el caon) y separado la base(donde esta el mecanismo y lsa ougas),
haz dos objetos, el primero puede llamarse obj_tank, que va a ser el tanque:
[center][u][b]Evento Create:[/b][/u][/center]
image_angle=random(360)
pasear=0;//crea la variable pasear
atacar=0;//crea la variable atacar
xmove=xstart;// el lugar a donde debe  es hacia la posicion del comienzo
ymove=ystart;//el lugar a donde debe  es hacia la posicion del comienzo
move=true; // se puede mover
image_single=1;//seteamos que el sprite del objeto
               //sea la pirmer imagen de la animaci?n
               
               r1=0;
               r2=0;



[center][u][b]Evento Step:[/b][/u][/center]
//MANEJO DE SPRITE
image_angle=direction //la imagen rota conforme a la direcion del objeto
//AI
//ATACAR
if instance_number(obj_player)=0 //si no existe jugador
    {
        atacar=false        //atacar es falso
    }   
if instance_number(obj_player)>0//si hay por lo menos un jugador
    {
        if (distance_to_object(jugador)<400 //si la distancia al jugador es menor a 250
        and point_direction(x,y,jugador.x,jugador.y)>direction-45 // y la direction hacia el jugador esta entre los
        and point_direction(x,y,jugador.x,jugador.y)<direction+45)// 90? del angulo de vision
        or distance_to_object(obj_player)<400 // ? si esta muy cerca
        then
        {
                atacar=true //tiene que ataca
                pasear=false //debe dejar de estar paseando por el mapa
              }
              else //de lo contrario
              {
                if distance_to_object(obj_player)>500 //si la distancia hacia el jugador es mayor a 200
                atacar=false                      //debe dejar de atacar
              }
}
if atacar=true //si atacar es verdadero
{
move_towards_point(jugador.x+r1,jugador.y+r2,1);//debe moverse hacia el jugador.
}

//PASEAR
if  atacar=false //si no esta atacando
    {pasear=true}//puede pasearse por el mapa
if pasear=true //si pasearse es verdadero
    {
        if (xmove<x+1)and(xmove>x-1) and (ymove>y-1) and (ymove<y+1) and move=true //si esta hacia donde deber?a moverse y se puede mover
        {
        xmove=round(xstart+random(40)+random(23)) //a donde debe moverse es X un lugar aleatorio
        ymove=round(ystart+random(40)+random(23)) //a donde debe moverse es Y un lugar aleatorio
        move=false // se desactiva mover
        speed=0
        }
        if round(random(60))=60 and move=false // si de la posibilidad se da de 1 en 60
        {
        move=true //puede moverse
        }
    }
if pasear=true and move=true //si pasear esta activada y se puede mover
    {
        move_towards_point(xmove,ymove,1.5);//debe moverse hacia la variables xmove e ymove.
    }


Ahora para la turret, que se va a llamar obj_tankturret:
[center][u][b]Evento Step:[/b][/u][/center]
if collision_circle(x,y,400,jugador,false,true)   //para cuando el jugador este cerca
{

target=instance_nearest(x,y,jugadpr) //este va a ser la definicion de el objetivo

image_angle=point_direction(x,y,target.x,target.y)//va a mirar hacia el jugador

x=obj_tank.x
y=obj_tank.y
}


Y listo!
eso es todo
Título: Re: ?como hacer una ia de un tanque??????????? (solucionado)
Publicado por: juan pablo en Junio 08, 2010, 10:50:21 PM
gracias :-* karma up :P