Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: michaelosan en Diciembre 21, 2013, 03:15:03 AM

Título: COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 21, 2013, 03:15:03 AM

COMO HACER NIVELES DESBLOQUEABLES  ESTILO ANGLY BIRDS y que se grabe el progreso

por favor pido ayuda ala comunidad , y ala ves se que esto va a servir para muchos , podria explicar alguien claramente como hacer esto de manera sencilla y facil y si pudiera brindar un ejemplo claro y conciso seria muy agradecido , casi para decir que seria un tutorial indispensable para todo aprendiz de game maker  , sin mas que decir instruyanme (gracias ) ???
Título: Re:COMO HACER NIVELES DESBLOQUEABLES y que se grabe el progreso
Publicado por: Mgbu en Diciembre 21, 2013, 06:25:43 PM
Podés fijarte en los siguientes posts:
http://www.comunidadgm.org/index.php?topic=19219.msg91214 (http://www.comunidadgm.org/index.php?topic=19219.msg91214)
http://www.comunidadgm.org/index.php?topic=19007.msg90140 (http://www.comunidadgm.org/index.php?topic=19007.msg90140)
http://www.comunidadgm.org/index.php?topic=10727.msg49845 (http://www.comunidadgm.org/index.php?topic=10727.msg49845)

Obviamente si tenés alguna duda pregunta
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 23, 2013, 01:05:15 AM
 :-[  la verdad  no hayo una solucion clara en esos 3 ejemplos
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: Mgbu en Diciembre 23, 2013, 01:27:50 AM
Me parece que la mejor forma es usar un archivo INI (http://www.comunidadgm.org/manual_GM/Archivos_INI.htm) en donde escribas algo así (si tiene un 1 está desbloqueado y si tiene un 0 está bloqueado):
[Niveles]
nivel1=1
nivel2=1
nivel3=1
nivel4=0
nivel5=0
nivel6=0
nivel7=0
nivel8=0

Entonces ponés un 0 o un 1 dependiendo si está bloqueado o no. Luego en la pnatalla de seleción de niveles lees el INI y te fijás cuáles niveles bloquear




En otro ejemplo recomendaban hacer algo así como un array en donde ponés true o false dependiendo si ese civel está bloqueado o no. Por ejemplo:
desbloqueados[1]=true
desbloqueados[2]=true
desbloqueados[3]=true
desbloqueados[4]=false
desbloqueados[5]=false
desbloqueados[6]=false
desbloqueados[7]=false
desbloqueados[8]=false

Y después te fijas en la selección de niveles cuáñes están bloqueados. El problema está en que de esta forma se pierden los progresos al reiniciar el juego, Por eso se puede usar la función de guardado del juego para volver a donde estabas. Pero eso implica guardar todo un juego, en el ejemplo del INI sólo hace falta guardar los desbloqueos
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: penumbra en Diciembre 23, 2013, 02:27:33 AM
Cita de: michaelosan en Diciembre 23, 2013, 01:05:15 AM
:-[  la verdad  no hayo una solucion clara en esos 3 ejemplos

Pues no tiene mucha ciencia, ni necesitas unos señores tutoriales: Bloqueado, desbloqueado, bloqueado, desbloqueado. Dos estados nada más.

¿Que quieres saber si se permite usar un poder? : poder = 1 (desbloqueado)
¿Que quieres saber si se permite salta doble? salto_doble = 0 (bloqueado)
¿Que quieres saber si un nivel está bloqueado? nivel_x = 1 (desbloqueado)

Tú decides si 0 significa bloqueado o desbloqueado. Como dijo mgbu, escribes en un archivo ini el estado del nivel. El manejo de archivos es diferente en Studio que en GM8, por lo que ahora debes añadir el archivo ini como archivo incluído
http://docs.yoyogames.com/source/dadiospice/001_advanced%20use/002_including%20files.html (http://docs.yoyogames.com/source/dadiospice/001_advanced%20use/002_including%20files.html)

Después de esto ya puedes proceder a leer el archivo en game maker, para controlar los niveles mediante el INI. Necesitarás las funciones
ini_open    para abrir el archivo
ini_close    al terminar el proceso de lectura/escritura hay que cerrar el ini
ini_write_real   para hacer que un nivel con valor 1 sea cero, o viceversa
ini_read_real  para saber si un nivel es 1 o 0
de las cuales vienen ejemplos de cómo se usan en el manual

http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/ini%20files/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/ini%20files/index.html)
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 23, 2013, 05:01:27 AM
 :GMS: hola gracias por la ayuda , ya cree un archivo ini y puse los50 niveles como sale en el ejemplo , bueno en el room menu de niveles , los botones de seleccion de nivel son  objetos con un sprite que solamente te llevan al room de destino
como configurar esto no podria  alguien hacer un pequeño ejemplo como para ver el codigo  , tal ves seria en cada objeto de  poner un codigo verificador de que si el nivel esta bloqueado o no y ala ves que me cambie el sprite por el de bloqueo (en caso de estar bloqueado), y si no esta bloqueado que me lleve al room , supongo q deberia ponerlo en el evento mouse de cada objeto, y al terminar un room que pase al siguiente room y sobreescriba el archivo ini  sobreescribiendolo y  lo que no se es como guardar todo el juego en el ini ??????????  para que no se borren los niveles desbloqueados , ala verdad si logro hacer esto me hago un parde ejemplos para gms , bueno


if no se lo que hago  { else }  ni como hacerlo ;  XD




por cierto lo hago como para android el game
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: Mgbu en Diciembre 23, 2013, 03:05:39 PM
No tengo GMS por lo que no te puedo hacer el ejemplo, pero te puedo explicar cómo hacer los botones

En el create se debe saber si el nivel está bloqueado o no. Para eso se abre el archivo INI, se lee si el nivel tiene un 1 o un 0 y se cierra el archivo INI. Luego más tarde en el mismo create se debe poner el sprite dependiendo del nivel y de si está bloqueado. Sería algo así:
ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
desbloqueado = ini_read_real("Niveles", "nivel2", 0) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI, el 0 es lo que devuelve la función en caso de error, dejalo así
ini_close()
if (desbloqueado = 1) sprite_index = spr_nivel2_desbloqueado // Si está desbloqueado poner el sprite correspondiente
else sprite_index = spr_nivel2_bloqueado // o si no poner el sprite de bloqueado


Y ahí ya está. Lo que falta es hacer que el botón vaya al nivel si éste es presionado. Entonces en el evento Mouse Click se pone:
if (desbloqueado = 1) room_goto(nivel2) // Ir a la room correspondiente si el botón está debloqueado

Por último si vos querés desbloquear un nivel, por ejemplo al completar el nivel anterior debes poner en el lugar indicado (o sea justo después de completar el nivel) esto:
ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
ini_write_real("Niveles", "nivel2", 1) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI. El número 1 es lo que se va a escribir en el INI, si uno quiere bloquear el nivel debería poner un 0
ini_close()
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 24, 2013, 06:04:32 AM
 :-\ hola hice todo lo unico que falta es la parte final no me  modifica el archivo ini al pasar  de nivel q molestia


ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
ini_write_real("Niveles", "nivel2", 1) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI. El número 1 es lo que se va a escribir en el INI, si uno quiere bloquear el nivel debería poner un 0
ini_close()

o sera el objeto que uso para pasar de nivel 

{ {
instance_deactivate_all(true);

instance_create(400, 240, obj_background_win);
instance_create(400, 250, object_next);
instance_create(400, 310, object_restart);
instance_create(400, 370, object_title);
instance_create(400, 140, obj_you_win);
instance_destroy();
}

}

oye por que no bajas de aqui esta versiion de prueba y haces un ejem plo plis gamemakerstudiomc.blogspot.mx/
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: Mgbu en Diciembre 24, 2013, 09:59:35 PM
Cita de: michaelosan en Diciembre 24, 2013, 06:04:32 AM
:-\ hola hice todo lo unico que falta es la parte final no me  modifica el archivo ini al pasar  de nivel q molestia


ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
ini_write_real("Niveles", "nivel2", 1) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI. El número 1 es lo que se va a escribir en el INI, si uno quiere bloquear el nivel debería poner un 0
ini_close()

o sera el objeto que uso para pasar de nivel 

{ {
instance_deactivate_all(true);

instance_create(400, 240, obj_background_win);
instance_create(400, 250, object_next);
instance_create(400, 310, object_restart);
instance_create(400, 370, object_title);
instance_create(400, 140, obj_you_win);
instance_destroy();
}

}

oye por que no bajas de aqui esta versiion de prueba y haces un ejem plo plis gamemakerstudiomc.blogspot.mx/
Tenés que poner este código en el lugar indicado:
ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
ini_write_real("Niveles", "nivel2", 1) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI. El número 1 es lo que se va a escribir en el INI, si uno quiere bloquear el nivel debería poner un 0
ini_close()

Debería ir en el lugar en donde se termina el nivel. Si el código que me pasaste se ejecuta al ganar quedaría algo así:
{ {
instance_deactivate_all(true);

instance_create(400, 240, obj_background_win);
instance_create(400, 250, object_next);
instance_create(400, 310, object_restart);
instance_create(400, 370, object_title);
instance_create(400, 140, obj_you_win);
ini_open("niveles.ini") // Cambiar "niveles.ini" por el nombre de tu archivo INI
ini_write_real("Niveles", "nivel2", 1) // Cambiar "Niveles" por la sección que uses del INI (Es lo que está entre corchetes en el INI, en mi ejemplo anterior era "Niveles") y cambiar "nivel2" por como tengas escrito ese nivel en el INI. El número 1 es lo que se va a escribir en el INI, si uno quiere bloquear el nivel debería poner un 0
ini_close()
instance_destroy();
}

}
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 24, 2013, 11:33:35 PM
 :D hasta ahora todo bien lo unico que falta es que cuando pase de nivel , me escriba  el archivo ini , si hiciera como me dices en el ejemplo tendria que crear 50  objetos win(y en cada , objeto win poner que escriba cada nivel correspondiente) y 50 objetos controladores (el controlador que uso se encarga de que si no queda ningun sprite , me cree el objeto win )uno por nivel , ? , se te ocurre algo mmm , ? como llamar un pedazo de codigo ? verificador  :-[  bueno gracias por tu ayuda men hasta ahora juro q  cuando le resuelva , hare un ejemplo  , para los novatos como yop   :GMS:

Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: michaelosan en Diciembre 25, 2013, 03:41:59 PM
HOLA HICE EL CODIGO COMO ME DIJISTE , LO UNICO MALO QUE EN EL MENU DE SELECCION DE NIVEL NO SE DESBLOQUEA EL SPRITE NI PERMITE ACCEDER AL NIVEL , Y REVISO EL ARCHIVO INI Y NO HAY CAMBIOS EN EL AL PARECER NO LO ESCRIBE O SERA QUE EL INI ESTA MAL UBICADO , YA QUE LO TENGO AGREGADO EN INCLUDES FILES O SERA QUE TAMBIEN TIENE QUE ESTAR EN LA CARPETA DEL PROYECTO AL COSTADO DEL ARCHIVO GML , PERO AUN ASI NO LO SOBREESCRIBE  :'( :'(  (POR CIERTO USO WINDOWS 7 ULTIMATE 64 BITS)

PARA MI QUE LA ES UN ERROR DE ESCRITURA YA QUE EN EL EJEMPLO INCLUIDO EN EL GAME MAKER STUDIO SALE QUE

Description
You can use this function to write a value (numeric) to an ini data file. Ini files are split into sections and then each section is subsequently split into key - value pairs. So a typical ini file would look something like this :






Example :
score = 1000;
ini_open( 'savedata.ini' );
ini_write_real( 'save1', 'Score', score );
score2 = ini_read_real( 'save1', 'Score', 0 );
ini_close();

This will set score to 1000, then open 'savedata.ini' and write this value to 'save1' > 'Score'. Then, it will set score2 to the real value under 'save1' > 'score' in it, 1000, and close the .ini again. Had it not found this value, score2 would have ended up set as 0.


ES LO UNICO QUE ME FALTA PARA TERMINAR MI GAME ABUUUUUUUUUUUU   :'(  ALGUIEN PODRIA DAR UNA MANITO GGRACIAS
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: Nikholas9 en Febrero 16, 2014, 11:18:25 PM
Gracias me ayudaron
Título: Re:COMO HACER NIVELES DESBLOQUEABLES ESTILO ANGLY BIRDS y que se grabe el progreso
Publicado por: 7sixerCF en Febrero 17, 2014, 02:02:56 AM
umm... el archivo .ini y es demaciado facil de modificar y desbloquiar todos los niveles, que te parecese si mejor haces la variables dentro del juego y usas los comandos correspondientes de Load and Save que bienen predefinidos dentro de Game Maker studios esto guarda las variables, puedes crear un objeto "UnlockLvs" que tenga un step que valla cambiando las variables cada vez que completas un nivel... algo exactamente como lo que te enseñaron, por ejemplo al final de cada nivel puedes hacer que se cree una variable algo haci como lv1=1 y que el "UnlockLvs" tenga en el step un check var que compruebe si lv1 esta completo si es haci desbloqueas el siguiente nivel xD algo haci pides no ? :S