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 ) ???
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
:-[ la verdad no hayo una solucion clara en esos 3 ejemplos
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
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)
: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
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()
:-\ 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/
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();
}
}
: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:
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
Gracias me ayudaron
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