Marzo 04, 2011, 12:19:46 PM Ultima modificación: Marzo 05, 2011, 01:49:07 AM por klys
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
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

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 =)
w f t g+

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)

?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.

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 ^^
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!