Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: klys en Marzo 04, 2011, 12:19:46 PM

Título: Mover objeto a un punto mientras es alineado a la cuadricula
Publicado por: klys en Marzo 04, 2011, 12:19:46 PM
Mi problema es algo complicadito, la situacion es que el script aqui abajo deberia mover el objeto donde se ejecuta hacia donde se le indica, pero no lo hace...
Esto va en Alarm[0] de un objeto
[gml]
veces += 1
AlarmTime = 20 // normal 7
Rapidez = 40
global.moviendome = 1




   switch(veces)
   {
       case 1:
       //action_linear_step(global.x1,global.y1,Rapidez,0);
       //action_move_to(global.x1,global.y1); // FUNCIONAL
       move_towards_point(global.x1,global.y1,Rapidez);
       //ang = point_direction(x,y,global.x1,global.y1);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 2:
       //action_linear_step(global.x2,global.y2,Rapidez,0);
       //action_move_to(global.x2,global.y2); // FUNCIONAL
       move_towards_point(global.x2,global.y2,Rapidez);
       //ang = point_direction(global.x1,global.y1,global.x2,global.y2);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 3:
       //action_linear_step(global.x3,global.y3,Rapidez,0);
       //action_move_to(global.x3,global.y3);
       move_towards_point(global.x3,global.y3,Rapidez);
       //ang = point_direction(global.x2,global.y2,global.x3,global.y3);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 4:
       //action_linear_step(global.x4,global.y4,Rapidez,0);
       //action_move_to(global.x4,global.y4);
       move_towards_point(global.x4,global.y4,Rapidez);
       //ang = point_direction(global.x3,global.y3,global.x4,global.y4);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 5:
       //action_linear_step(global.x5,global.y5,Rapidez,0);
       //action_move_to(global.x5,global.y5);
       move_towards_point(global.x5,global.y5,Rapidez);
       //ang = point_direction(global.x4,global.y4,global.x5,global.y5);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 6:
       //action_linear_step(global.x6,global.y6,Rapidez,0);
       //action_move_to(global.x6,global.y6);
       move_towards_point(global.x6,global.y6,Rapidez);
       //ang = point_direction(global.x5,global.y5,global.x6,global.y6);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 7:
       //action_linear_step(global.x7,global.y7,Rapidez,0);
       //action_move_to(global.x7,global.y7);
       move_towards_point(global.x7,global.y7,Rapidez);
       //ang = point_direction(global.x6,global.y6,global.x7,global.y7);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 8:
       //action_linear_step(global.x8,global.y8,Rapidez,0);
       //action_move_to(global.x8,global.y8);
       move_towards_point(global.x8,global.y8,Rapidez);
       //ang = point_direction(global.x7,global.y7,global.x8,global.y8);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 9:
       //action_linear_step(global.x9,global.y9,Rapidez,0);
       //action_move_to(global.x9,global.y9);
       move_towards_point(global.x9,global.y9,Rapidez);
       //ang = point_direction(global.x8,global.y8,global.x9,global.y9);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
       case 10:
       //action_linear_step(global.x10,global.y10,Rapidez,0);
       //action_move_to(global.x10,global.y10);
       move_towards_point(global.x10,global.y10,Rapidez);
       //ang = point_direction(global.x9,global.y9,global.x10,global.y10);
       //motion_set(ang,Rapidez);
       //move_snap(32,32);
       global.PM -= 1
       //if (veces == global.PosMax) break;
       //if (veces != global.PosMax) {alarm[0] = AlarmTime;}
       break;
       
   }
[/gml]

Como pueden ver, eh intentado usar diferentes formas de desplazamiento pero sin resultados satisfactorios(o a lo mejor los eh usado mal).

Ese script deberia mover el objeto donde es ejecutado entre lapsos de 20 frames (AlarmTime)

todos los global.x y global.y son variables que automaticamente se acomodan de otra forma que poco importa (porque funciona bien)

La duda, entonces, es... Que estare haciendo mal para que el objeto no se mueva hacia el lugar indicado?

Mas detalles:
En step event tengo move_snap(32,32)

Adjunto el funcionamiento actual del c?digo con "action_move_to" el cual lo que hace es simplemente como si estuviera ejecutandose:
[gml]
x = global.x1
y = global.y1
[/gml]

http://www.mediafire.com/?yzecwycu2eyyjzy
Título: Re: Mover objeto a un punto mientras es alineado a la cuadricula
Publicado por: Daz en Marzo 04, 2011, 03:14:21 PM
Debes colocar la versi?n que uses de GM como icono.
Te dejo unos d?as para que lo cambies, si no, pues terminar? borrando el tema =)
Título: Re: Mover objeto a un punto mientras es alineado a la cuadricula
Publicado por: lordgeorge en Marzo 04, 2011, 06:59:28 PM
No se como tienes todo programado exactamente pero una funci?n tan util como move_snap(32,32), es place_snapped(32,32). Al menos gracias a esas 2 funciones logr? hacer con pocos problemas un movimiento de RPG por celdas (p?kemon es el mas conocido por tener ese movimiento XD)

* Ejemplo que te puede ayudar a solucionar el problema:
Create Event:
[gml]direction=0
move_snap(32,32)
for(i=1;i<=10;i+=1){
    dir=choose(0,90,180,270)
}
turn=0[/gml]
Alarm Event for alarm 0:
[gml]turn+=1
if(turn<=10){
    speed=2
    direction=dir[turn]
}[/gml]
Step Event:
[gml]if(place_snapped(32,32) and alarm[0]=-1){
    alarm[0]=30
    speed=0   
}[/gml]
Este objeto escoger? aleatoriamente 10 direcciones y se mover? 10 veces segun las direcciones que salieron (puse una alarma para que se mueva mas pausado)
Título: Re: Mover objeto a un punto mientras es alineado a la cuadricula
Publicado por: WillyDeLeon en Marzo 05, 2011, 12:41:24 AM
?Ya intentaste correr el programa en modo debug?
Puedes hacer que te muestre el valor de todas las variables incluso las globales, eso como sirve yo siempre lo uso, sin ello me costar?a mucho.

Es solo una sugerencia.
Título: Re: Mover objeto a un punto mientras es alineado a la cuadricula
Publicado por: klys en Marzo 05, 2011, 06:10:38 AM
Disculpen por no colocar el icono de GM que uso, escrib? el tema y como 12 horas despu?s le di publicar (me hab?a dormido)

lordgeorge ?Gracias!, era lo que estaba buscando :)

y Willy, se usar el debug mode, gracias de todas formas ^^