Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zerozerito en Agosto 27, 2010, 02:10:13 AM

Título: crear repeticiones en los juegos (solucionado)
Publicado por: zerozerito en Agosto 27, 2010, 02:10:13 AM
 :GM8:
Hola amigos el tema que vengo a traer y que de verdad es muy buscado por los makeros (en general) es como crear un sistema de repeticiones.

Pregunto como puedo crear un sistema de repeticiones que por ejemplo haga que al finalizar mi nivel este disponible una repetici?n y que el jugador imite los movimientos que el usuario haya hecho durante ese nivel.

Mi sprite que se maneja durante el juego solo es 1 osea que no me interesa conseguir algo que acomode cada sprite para una representacion 100 si no que solo busco un codigo que imite los movimientos mas no acomodar los sprites se que es un reto quizas esto pero yo se y son con quien pueda confiar gracias.
Título: Re: crear repeticiones en los juegos
Publicado por: Texic en Agosto 27, 2010, 02:23:06 AM
No entendi nada la ultima parte, pero justamente logr? eso con mis super arrays. S?lo hace falta adaptarlo para que lo haga con todos los objetos y lo guarde en arrays que contengan su nombre de id, una especie de

with (all)
{
arrayset(string(id)+"posx",step,x)
arrayset(string(id)+"posy",step,y)
etc
}

Luego reinicias el room con una global llamada repeticion activada, entonces los objetos en vez de interactuar y moverse, se rigen por sus propios vectores con arrayget. Bueno, mira el ejemplo y entender?s, est? dise?ado para que mario vuelva en el tiempo con la tecla de borrar (backspace)
Título: Re: crear repeticiones en los juegos
Publicado por: flayd4 en Agosto 27, 2010, 03:09:27 AM
Suponiendo que el nombre del objeto del cual quieres grabar los movimientos se llama obj_personaje

en el obj_personaje:

Evento Create

Citar

//variable para grabar
obj_personaje.record = 0;

//variable para reproducir
obj_personaje.replay = 0;


Despues crea un objeto nuevo y llamalo obj_record

luego ponle esto:

Evento Create

Citar

//Numero de frame
i = 0;


Evento Step

Citar

//Empieza a grabar
if obj_personaje.record = 1
{
   frame  = i;
   sprite = obj_personaje.sprite_index;
   image  = obj_personaje.image_index;
   corx   = obj_personaje.x;
   cory   = obj_personaje.y;
   i += 1;
}

//Empieza a reproducir
if obj_personaje.replay = 1
{
   //fin de la reproduccion
   if obj_personaje.nframe >= i
   {
      show_message("fin de la reproduccion");
      obj_personaje.record = 0;
      obj_personaje.replay = 0;
      exit;
   }
   obj_personaje.sprite_index = sprite[obj_personaje.nframe];
   obj_personaje.image_index = image[obj_personaje.nframe];
   obj_personaje.x = corx[obj_personaje.nframe];
   obj_personaje.y = cory[obj_personaje.nframe];
   obj_personaje.nframe += 1;
}


Para empezar a grabar:

Citar

obj_personaje.record = 1;
obj_personaje.replay = 0;


Para detener una grabacion:

Citar

obj_personaje.record = 0;
obj_personaje.replay = 0;


Para reproducir una grabacion guardada:

Citar

obj_personaje.record = 0;
obj_personaje.replay = 1;


Nota:!!!

Esto lo acabo de crear "al vuelo" pero lo revise y creo que debe funcionar...

Recuerda que esto graba posicion, sprite, y frame del sprite ?nicamente del objeto personaje (a.k.a obj_personaje), espero te sirva.

Edit1: Anexe un archivo de prueba y me funciono

Si lo pruebas haz lo suiguiente:
- Corre el juego, una vez empezado presiona Z
- Mueve la esfera con las flechas
- Presiona X para detener la grabacion
- Presiona Z para reproducir la grabacion

je, je, si presionas Z antes de grabar algo te dara error, pero eso se soluciona facil, solo hay que asignar la variable nframe = 0.

Saludos.
Título: Re: crear repeticiones en los juegos
Publicado por: zerozerito en Agosto 27, 2010, 08:54:40 PM
muchas gracias amigos se que en ustedes podia confiar aunque voy a probar para ver que tal
Título: Re: crear repeticiones en los juegos (solucionado)
Publicado por: zerozerito en Agosto 27, 2010, 08:59:15 PM
Eaaa si me funciono aunque me dio error fname solo puse lo que me indicaste gracias jaja funciona al 100