Sì, la soluzione c'è: invece di includere i suoni nel progetto, ti conviene lasciare i file mp3 sfusi, e caricarli solo quando necessario, utilizzando le funzioni di Game Maker per gestire le risorse.Legend3D ha scritto:salve sn di nuovo io ^^ ... >.< ho notato che caricando i suoni di formato mp3 il caricamento dell'eseguibile del gioco diventa abbastanza lungo... avevo pensato a cambiare il formato in midi ma penso che la cosa sia abbastanza brutta >.< quindi mi chiedo se esiste altra soluzione per caricare i suoni evitando di appesantire troppo il loading eccetto quello di tenere solo 3 musichette per tt il game grazie ^^
Codice: Seleziona tutto
sound_stop(soMusica);
sound_replace(soMusica,argument0,3,true);
sound_loop(soMusica);
Codice: Seleziona tutto
play_music("intro.mp3");
quindi se ho ben capito cosa devo fa:sggsoftware ha scritto:Sì, la soluzione c'è. Invece di includere i suoni nel progetto, ti conviene lasciare i file MP3 sfusi e caricarli solo quando necessario, utilizzando le funzioni di Game Maker per gestire le risorse.Legend3D ha scritto:salve sn di nuovo io ^^ ... >.< ho notato che caricando i suoni di formato mp3 il caricamento dell'eseguibile del gioco diventa abbastanza lungo... avevo pensato a cambiare il formato in midi ma penso che la cosa sia abbastanza brutta >.< quindi mi chiedo se esiste altra soluzione per caricare i suoni evitando di appesantire troppo il loading eccetto quello di tenere solo 3 musichette per tt il game grazie ^^
Crea un suono nel tuo progetto e chiamalo soMusica, ma non caricare alcun file, lascialo vuoto. Poi aggiungi questo script (chiamalo come vuoi, per esempio play_music):Fatto questo, ogni volta che vuoi riprodurre un file mp3 (e non solo) nel tuo gioco, basta chiamare lo script play_music, passando come parametro il nome del file. Esempio:Codice: Seleziona tutto
sound_stop(soMusica); sound_replace(soMusica,argument0,3,true); sound_loop(soMusica);
In generale, conviene sempre non includere risorse grandi e caricarle invece da file esterni quando occorre, in modo da alleggerire il caricamento del gioco (nonchè le dimensioni dell'EXE) e occupare meno memoria, che sia memoria video o RAM.Codice: Seleziona tutto
play_music("intro.mp3");
Ok, ritocco un po' lo script precedente in modo che faccia questo controllo in automatico:Legend3D ha scritto:quindi se ho ben capito cosa devo fa:
1) cancello i suoni mp3 che uso come musica sui livelli e creo 1 solo suond soMusica vuoto, poi faccio new script nome e ci metto il codice... quando voglio eseguire una musica metto nell'object che mi crea la musica il codice che me la riproduce dal file giusto? ma i suoni devo tenerli nella stessa cartella dove sta il progetto del gioco no?
si ok funziona ma ora sorge un'altro problema io prima nello step dell'oggetto del suono tenevo un controllo che attivava questo suono solo se nn era ancora attivo perchè se cambiando room (dove il suono deve essere uguale) nn ce bisogno che ricomincia a suonoarlo dall'inizio ma è continuo finchè nn si arriva ad una room con suono different, che codice metto per creare un if per controllare se il suono è in play o no?
Codice: Seleziona tutto
if (!variable_global_exists("musica")) global.musica="";
if (global.musica!=argument0)
{
global.musica=argument0;
sound_stop(soMusica);
sound_replace(soMusica,argument0,3,true);
sound_loop(soMusica);
}
Preferibilmente sì. In alternativa potresti metterli in sottocartelle, ma alla funzione play_music dovrai passare il percorso file. Dovrebbe funzionare.Legend3D ha scritto:ma i suoni devo tenerli nella stessa cartella dove sta il progetto del gioco no?
Codice: Seleziona tutto
global.musica = sound_add("musica.mp3",1,true)
sound_loop(global.musica)
Codice: Seleziona tutto
sound_stop(global.musica)
Codice: Seleziona tutto
global.musica = sound_add("musica.mp3",1,true)
if not sound_isplaying(global.musica)
sound_loop(global.musica)
C'è qualcosa che non mi convince! Scusa, in questo modo tu aggiungi una nuova risorsa al progetto ogni volta che riproduci un file musicale, non sostituisci una risorsa esistente.No-Code93 ha scritto:la musica che vuoi riprodurre la copi nella cartella del gioco, non nel progetto, poi crei un obj e in create gli metti:naturalmente al posto di musica.mp3 gli metti il nome del file musicaleCodice: Seleziona tutto
global.musica = sound_add("musica.mp3",1,true) sound_loop(global.musica)
Codice: Seleziona tutto
play_music("a.mp3");
play_music("b.mp3");
play_music("a.mp3");
play_music("b.mp3");
play_music("a.mp3");
play_music("b.mp3");
Sbagliato, questo vale per numeri stringhe o altri tipi primitivi, le risorse che aggiungi sono permanenti, la variabile é solo una "referenza" alla risorsa, non rappresenta la risorsa stessa. Questo vuol dire che sovrascrivendo la variiabile stai solo cambiando una referenza, non una risorsa.No-Code93 ha scritto:segui la logica, la variabile è la stessa, quindi la musica che viene aggiunta sostituisce quella precedente, di conseguenza la memoria ovvupata è solo quella della musica in uso, quella di prima si è tolta