He creado un boton de sonido en el menu, cuando aprieto el objeto boton el sonido se apaga y aparece otro objeto de boton sin sonido(esto lo he creado mediante un change instance into). El sonido si que se apaga, el problema lo tengo que cuando vuelvo al menu principal el boton sin sonido no esta, esta el boton con sonido. me gustaria que se quedara el boton que he apretado cuando volviera al menu.
Muchas Gracias
Amigo primero q todo pon el objeto sonido persistente
Luego en create crea una variable llamada sonido=0;
Luego en left press pon
if sonido=0
{
sonido=1;
audio_stop_music() ;
sprite_index=spritedesinsonido;//cambia esto
}
else
{
sonido=0;
audio_play_music(musica);
sprite_index=spritedeconsonido; //cambia esto
}
Saludos
Muchas gracias, pero no me va bien. lo unico que quiero esq el boton sin sonido cuando lo aprete siga en el boton sin sonido cuando vuelva al menu principal.
gracias
Cita de: pacne en Abril 01, 2014, 09:21:14 PM
Muchas gracias, pero no me va bien. lo unico que quiero esq el boton sin sonido cuando lo aprete siga en el boton sin sonido cuando vuelva al menu principal.
gracias
Eso cambia la lógica de tu menú, por lo que tienes que hacer cambios. Al comienzo del juego tu menú ya está definido, y siempre comienza igual, es decir, siempre comienza con el botón con sonido, aunque dentro del juego cambies el botón al botón sin sonido, al cerrar el juego y volver a iniciarlo, el evento CREATE (o el evento donde definas el menu) dicta que aparezca OTRA VEZ el botón con sonido.
Tienes que modificar tu juego de manera que una simple variable (valor 0 o 1) indique si se carga el botón con sonido o el botón sin sonido cuando se ejecuta el evento CREATE (o el evento que defina el menú). Para hacer esto, necesitas usar un sistema de guardado de datos en un archivo ini o un archivo de texto. Hacer un sistema de guardado es una de las preguntas más formuladas en las últimas semanas, por lo que no te costará dar con ejemplos en el foro.
si tengo un archivo ini creado para el mejor score, pero como le puedo meter que se guarda lo del sonido.
Muchas gracias
Buenas, mira aquí: http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/ini%20files/index.html
y aquí: http://gamemaker.info/en/manual/401_08_if
y por último: http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20properties/sprite_index.html
y con esto ya tienes tu duda resuelta ;)
Saludos!
pones esto en el evento create
ini_open("nombrearchivo");
sonido=ini_read_real("configuracion","sonido",0);//0 es un valor por defecto si no encuentra el archivo
ini_close();
if sonido=0
{
instance_create(x,y,obj_consonido);
}
else
{
inatance_create(x,y,obj_sinsonido);
}
en el evento left press del obj_consonido agregas esto
ini_open("nombrearchivo");
ini_write_real("configuracion","sonido",1);//0 es un valor por defecto si no encuentra el archivo
ini_close();
instance_create(x,y,obj_sinsonido);
insntace_destroy();//esto no se si sera conveniente ponerlo, ponlo y si te da error quitas esta linea
en el evento left press del obj_sinsonido agregas esto
ini_open("nombrearchivo");
ini_write_real("configuracion","sonido",0);//0 es un valor por defecto si no encuentra el archivo
ini_close();
instance_create(x,y,obj_consonido);
insntace_destroy();//esto no se si sera conveniente ponerlo, ponlo y si te da error quitas esta linea
ocarina, ¿No es más fácil crear un sólo objeto "botón" llamado obj_sonido por ejemplo y 2 sprites, uno que indique que hay sonido y otro que no?:
Con lo que quedaría así: (Cambio read_real por read_string) -> Cuestión de gustos :p
En el create del botón de sonido: -> Esto te cambia el sprite dependiendo de si hay sonido o no.
ini_open("nombrearchivo.ini");
sonido_si_no=ini_read_string("configuracion","sonido","null");//"null" es el valor que da si no encuentra el archivo
ini_close();
// esto es un condicional, quiere decir: Si la variable sonido es igual a "no"
if(sonido_si_no == "no")
{
//Pone el sprite que indica que NO tiene sonido
sprite_index = sprite_sinsonido;
}
// si la variable no es "no"
else
{
//Pone el sprite que indica que SI tiene sonido
sprite_index = sprite_consonido;
}
en el evento left press del botón agregas esto: -> Esto te escribe en el ini
ini_open("nombrearchivo.ini");
if (sprite_index = sprite_consonido)
{
// Escribimos el string en el ini.
ini_write_string("configuracion","sonido","no");
// y cambiamos el sprite de nuevo
sprite_index = sprite_sinsonido
}
else
{
// Escribimos el string en el ini.
ini_write_string("configuracion","sonido","yes");
// y cambiamos el sprite de nuevo
sprite_index = sprite_consonido
}
ini_close();
No he comprobado el código pero algo así debería funcionar, también es más fácil que crees un script y que en el evento room start o en el creation code de la room (más recomendable) haga la comprobación en ese script y ejecute o no la música, así no tienes que andar metiendo porciones de código en cada room para comprobar el sonido y lo tienes todo bien juntito y ordenado en un script.
En un script -> Esto ejecuta lo anteriormente hecho dependiendo de si hay música o no
if(room == Nivel01)
{
ini_open("nombrearchivo.ini");
n1sonido = ini_read_string("configuracion","sonido","null");
ini_close();
if(n1sonido == "yes")
{
audio_play_sound(idSonido, preferencia, loop true o false)
}
}
Y en el creation code del room: -> Esto ejecuta el script, así pones el mismo fragmento en todos los create code:
script_execute(tuscript);
A todas estas el archivo ini deberá tener esta estructura (Siempre que lo añadas en included files)
[configuracion]
; esta es la sección configuración
sonido=yes
; se pone entre comillas en el juego ya que es una string.
; si vas a escribir acentos o caracteres especiales ¡¿ñáéíóú asegúrate de codificar el INI como UTF-8
Pero vamos, que leyendo los 3 enlaces enseguida das cuenta de cómo funciona :)
Cita de: pacne en Abril 02, 2014, 10:26:23 PM
ya esta!!!!!!!, Y MUCHAS GRACIAS A TODOS. he utilizado por si alguien le sirve el metodo de Caleb. Repito que muchas gracias, me estaba llevando un calentamiento de cabeza.jejeje. Solucionado.
De nada, tio, no hagas solo copy-paste plis, (Esto no es nada personal, es un menasje que empiezo a dejar cuando contesto de manera automática) tanto @ocarina como yo te hemos comentado el código para que lo entiendas y puedas crear tus propios IF y entiendas cómo va lo de leer y escribir en un ini, la diferencia entre ambos códigos es que read_string lee una cadena y read_real sólo lee números. Cosikas así.
También te recomiendo que uses los scripts cuanto puedas para no tener porciones de código iguales repartidos por el proyecto. Y si, a mi al principio, cuando miraba el proyecto y veía la carpeta Scripts me temblaba todo, pero oye, al menos para las opciones y puntuaciones pues va bien (Y para más cosas, pero algo así básico es esto) :)
De hecho, yo aprendí a manejar los archivos INI con un post de @ocarina en el que explicaba cómo hacer un sistema de puntuaciones hace cosa de 3 semanas, eh? XD
¡Saludos!
el mismo que utilice yo, pero es que el sprite si que va como yo queria, pero el sonido no se apaga, ni se enciende cuando apreto el boton, tengo que poner una variable, o algo, grracias a los DOS
audio_play_sound(idSonido, preferencia, loop true o false). para que es y que se suele poner
gracias
Cita de: _-Caleb-_ en Abril 02, 2014, 08:06:20 AM
ocarina, ¿No es más fácil crear un sólo objeto "botón" llamado obj_sonido por ejemplo y 2 sprites, uno que indique que hay sonido y otro que no?:
Con lo que quedaría así: (Cambio read_real por read_string) -> Cuestión de gustos :p
En el create del botón de sonido: -> Esto te cambia el sprite dependiendo de si hay sonido o no.
ini_open("nombrearchivo.ini");
sonido_si_no=ini_read_string("configuracion","sonido","null");//"null" es el valor que da si no encuentra el archivo
ini_close();
// esto es un condicional, quiere decir: Si la variable sonido es igual a "no"
if(sonido_si_no == "no")
{
//Pone el sprite que indica que NO tiene sonido
sprite_index = sprite_sinsonido;
}
// si la variable no es "no"
else
{
//Pone el sprite que indica que SI tiene sonido
sprite_index = sprite_consonido;
}
en el evento left press del botón agregas esto: -> Esto te escribe en el ini
ini_open("nombrearchivo.ini");
if (sprite_index = sprite_consonido)
{
// Escribimos el string en el ini.
ini_write_string("configuracion","sonido","no");
// y cambiamos el sprite de nuevo
sprite_index = sprite_sinsonido
}
else
{
// Escribimos el string en el ini.
ini_write_string("configuracion","sonido","yes");
// y cambiamos el sprite de nuevo
sprite_index = sprite_consonido
}
ini_close();
No he comprobado el código pero algo así debería funcionar, también es más fácil que crees un script y que en el evento room start o en el creation code de la room (más recomendable) haga la comprobación en ese script y ejecute o no la música, así no tienes que andar metiendo porciones de código en cada room para comprobar el sonido y lo tienes todo bien juntito y ordenado en un script.
En un script -> Esto ejecuta lo anteriormente hecho dependiendo de si hay música o no
if(room == Nivel01)
{
ini_open("nombrearchivo.ini");
n1sonido = ini_read_string("configuracion","sonido","null");
ini_close();
if(n1sonido == "yes")
{
audio_play_sound(idSonido, preferencia, loop true o false)
}
}
Y en el creation code del room: -> Esto ejecuta el script, así pones el mismo fragmento en todos los create code:
script_execute(tuscript);
A todas estas el archivo ini deberá tener esta estructura (Siempre que lo añadas en included files)
[configuracion]
; esta es la sección configuración
sonido=yes
; se pone entre comillas en el juego ya que es una string.
; si vas a escribir acentos o caracteres especiales ¡¿ñáéíóú asegúrate de codificar el INI como UTF-8
Si amigo es mas facil y yo lo haris asi! Pero si vez un poco mas arriba veras q yo le di esa opción al compañero pero el no quiso de esa forma x eso le di la otra opción con objetos
Saludos
Pero vamos, que leyendo los 3 enlaces enseguida das cuenta de cómo funciona :)
Cita de: pacne en Abril 02, 2014, 11:03:25 PM
audio_play_sound(idSonido, preferencia, loop true o false). para que es y que se suele poner
gracias
Esta no te la voy a contestar porque es
TAAAAN obvia, lee la función... audio play sound (http://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/audio_play_sound.html)
Citaraudio_play_sound
Plays the indicated sound.
EDITO: Si una cosa tan básica como esta te produce un parón en tu proyecto, te recomendaría, a título personal que siguieras con el juego, haciendo otros aspectos, porque así aprenderás cosas que al final te llevarán a esto, yo en mi proyecto no le metí opciones hasta después de 2 meses de curro con los gráficos y los niveles, las rutinas de movimiento, etc.
Y cuando digo que yo aprendí a usar los inis con el post de @ocarina digo que
aprendí a usarlo, si haces copy-paste, como veo que es el caso, nunca aprenderás y tendrás que depender de los demás para finalizar
TU juego.
Por ejemplo a mi, penumbra o vampy me han pasado porciones de código que he usado, al tener preguntas, pero las imprimí, con los comentarios que ellos me pusieron, y leí acerca de esas funciones y aprendí a usarlas, me reitero, de hecho seguro que si buscamos 10 o 15 páginas atrás en el foro ésta misma duda está resuelta :S
gracias a los dos, ya lo tengo solucionado, e intento no hacer copy, sino entender el codigo, y ahora lo entiendo, ya lo tengo solucionado, MUCHAS GRACIAS