Hola a todos, bueno despues de mucho tiempo me anime a crear mi juego de pokemon, desde el game maker 7 pro, y bueno fui recolectando un monton de ejemplos y engines desde que masomenos le voy dando forma al proyecto, lo que me interesaria es si alguien tendria algun script de como hacer que un objeto persiga a otro, estilo pokemon heart gold/soul silver, es decir siguiendo una cuadricula de 16x16. Desde ya muchisimas gracias saludos! :D

En el evento con que mueves al jugador, haz que tambien le de un valor a la variable dependiendo de su direccion.

Y en el evento step del pokemon pon lo siguiente:

[gml]
switch (jugador.direccion)
{
case "arriba": x = jugador.x; y = jugador.y + 16; break;
case "abajo": x = jugador.x; y = jugador.y - 16; break;
case "derecha": x = jugador.x -16; y = jugador.y; break;
case "izquierda": x = jugador.x +16; y = jugador.y; break;
}
[/gml]

Te aclaro que no estoy muy seguro de si el evento switch se puede usar de esta manera, ya que no llevo mucho tiempo usandolo, si asi no funciona arreglalo, o sino hazlo con 4 if distintos.

Tambien debe ser un poco "feo" a la hora de verse animado, pero eso veras tu como lo quieres.
Cualquier cosa vuelve y vemos como te podemos ayudar mejor.

#2 Octubre 07, 2011, 04:21:06 AM Ultima modificación: Octubre 07, 2011, 04:22:37 AM por Maxi-5200-Cabj
Cita de: MaanuRP en Octubre 07, 2011, 03:12:36 AM
En el evento con que mueves al jugador, haz que tambien le de un valor a la variable dependiendo de su direccion.

Y en el evento step del pokemon pon lo siguiente:

[gml]
switch (jugador.direccion)
{
case "arriba": x = jugador.x; y = jugador.y + 16; break;
case "abajo": x = jugador.x; y = jugador.y - 16; break;
case "derecha": x = jugador.x -16; y = jugador.y; break;
case "izquierda": x = jugador.x +16; y = jugador.y; break;
}
[/gml]

Te aclaro que no estoy muy seguro de si el evento switch se puede usar de esta manera, ya que no llevo mucho tiempo usandolo, si asi no funciona arreglalo, o sino hazlo con 4 if distintos.

Tambien debe ser un poco "feo" a la hora de verse animado, pero eso veras tu como lo quieres.
Cualquier cosa vuelve y vemos como te podemos ayudar mejor.
Uh gracias, es como algo cuadrado cuando cambia de lado  :'( pero algo es algo, tendre que ver como hago para que se paresca mas real. Gracias!  ;)

PD: Si a alguien se le ocurre otra forma, bienvenido sea. :)

Si si, no des por cerrado el tema, lo mio fue como un inicio de lo que seria el script, ya que es muy "precario" y feo a la vista, mas si quieres hacer un pokemon con graficos de las ultimas versiones que no se ve nada lindo, ni siquiera para las primeras versiones se veria lindo, ya que ni siquiera le da movilidad.

Puedes intentar ideartelas tu mismo para conseguir algo con esto nuevo que te di, ingeniartelas para que el objeto vaya HASTA las coordenadas esas iguales pero de a poco, etc.

Pero si no puedes, para eso esta el foro y la gran cantidad de usuario expertos en GM, espero que alguien te pueda dar la solucion exacta a la que quieres ;)

Sisi, es para ese tipo de graficos, igual ya estoy probando coordenadas para que me quede con mas movilidad, ojala puedan ayudarme. Sino esta bien de todos modos es algo que queria implementar, de no poder hacerlo me preocupare por hacer otras cosas tambien. Igual muchisimas gracias por preocuparte.!

Tal vez este script te pueda ayudar... siento no poder probarlo ahora

[gml]if(distance_to_object(obj_personaje)>=16)
{
  if(point_direction(x,y,obj_personaje.x,obj_personaje.y)=0 or point_direction(x,y,obj_personaje.x,obj_personaje.y)=90 or point_direction(x,y,obj_personaje.x,obj_personaje.y)=180 or point_direction(x,y,obj_personaje.x,obj_personaje.y)=270)
  {
    direction=point_direction(x,y,obj_personaje.x,obj_personaje.y);
    speed=5;
  }
  else
  {
    direction=obj_personaje.direction;
    speed=5;
  }
}
else if(distance_to_object(obj_personaje)==0)
{
  speed=0
}[/gml]

Yo probe con el script de arriba y a mi no me funciono, pero quizas solo fue porqe lo puse mal, lo puse donde no debia, etc. Asi que si o si pruebalo porque se ve bien.

Sino, fijate si el ejecto este te gusta:
[gml]
//Evento "Step" del pokemon que va a seguir al "Jugador"
mp_linear_step(Jugador.x,Jugador.y,8,1)
[/gml]

Este script  de Manu... funcionaria con una ligera modificaci?n
switch (jugador.direccion)
{
case "arriba": x = jugador.x; y = jugador.y + 16; break;
case "abajo": x = jugador.x; y = jugador.y - 16; break;
case "derecha": x = jugador.x -16; y = jugador.y; break;
case "izquierda": x = jugador.x +16; y = jugador.y; break;
}
//asi quedaria modificado
var a, b;
a=jugador.direccion
b=abs(a)
switch (b)
{
case 90: x = jugador.x; y = jugador.y + 16; break;
case 270: x = jugador.x; y = jugador.y - 16; break;
case 0: x = jugador.x -16; y = jugador.y; break;
case 180: x = jugador.x +16; y = jugador.y; break;
}

//Yo lo aria de otra manera pero esta podria servir

Cita de: elviskelley en Octubre 13, 2011, 02:51:12 AM
Este script  de Manu... funcionaria con una ligera modificaci?n
switch (jugador.direccion)
{
case "arriba": x = jugador.x; y = jugador.y + 16; break;
case "abajo": x = jugador.x; y = jugador.y - 16; break;
case "derecha": x = jugador.x -16; y = jugador.y; break;
case "izquierda": x = jugador.x +16; y = jugador.y; break;
}
//asi quedaria modificado
var a, b;
a=jugador.direccion
b=abs(a)
switch (b)
{
case 90: x = jugador.x; y = jugador.y + 16; break;
case 270: x = jugador.x; y = jugador.y - 16; break;
case 0: x = jugador.x -16; y = jugador.y; break;
case 180: x = jugador.x +16; y = jugador.y; break;
}

//Yo lo aria de otra manera pero esta podria servir

Me gustaria saber de que forma lo harias vos, siempre me fueron de mucha utilidad tus scripts, si tienes ganas, ponlo, seguro funciona mejor :D

if distance_to_object(jugador)>16
{
if x<jugador.x
{x+=jugador.speed;}
if x>jugador.x
{x-=jugador.speed;}
if y<jugador.x
{y+=jugador.speed;}
if y>jugador.x
{y-=jugador.speed;}
}