In questo articolo continuiamo ad occuparci della gestione degli asset in un gioco HTML5, passando ad esaminare il caricamento dei suoni e definendo la funzione LoadSounds
function ResourcesHandler(callback) {
/* dichiarazione proprietà */
// ...
/* caricamento sprite e immagini */
// ...
/* controllo caricamento immagini */
// ...
/* disegno del loader */
// ...
/* caricamento dei suoni */
this.LoadSound = function(url, formats) {
this.loading = true;
var sound = new Audio();
sound.src = url+"."+formats[0];
sound.formatIndex = 0;
sound.volume = 0.05;
this.resNumber++;
sound.rh = this;
sound.addEventListener("canplaythrough", function() {
this.rh.resLoaded++;
this.rh.CheckLoaded();
}, false);
sound.addEventListener("error", function(e) {
if(++this.formatIndex >= formats.length) {
this.rh.errors.push([url, e.currentTarget.error.code]);
this.rh.CheckLoaded();
} else {
this.src = url+"."+formats[this.formatIndex];
}
});
return sound;
}
}
Argomento | Descrizione |
---|---|
url |
L'URL del suono da caricare (senza estensione) |
formats |
un array di formati audio che possiamo caricare (mp3, ogg) |
Questa funzione crea un elemento audio, lo salva in una variabile sound
e successivamente imposta il source e il volume.
Come per le immagini, incrementa il numero di suoni da caricare e salva un riferimento a ResourceHandler
.
Per gli elementi audio, esiste l'evento canplaytrough, che esegue una funzione quando il suono può essere riprodotto. Passiamo come argument una funzione che incrementa il numero di risorse caricate e chiama CheckLoaded
.
L'evento error
dei suoni dovrà invece essere gestito, poiché alcuni browser non supportano alcuni formati audio molto utilizzati (al momento opera non supporta gli mp3 e internet explorer 11 gli ogg vorbis), di conseguenza perché l'audio funzioni su tutti i browser, bisognerà caricare i suoni in entrambi i formati, utilizzare quello supportato dal browser, e passare come argument "formats" un array di 2 elementi.
Infatti se vi verificasse un errore, la funzione proverà a caricarlo con l'altro formato. Ad esempio:
LoadSound("sounds/jump", ["mp3", "ogg"]);
Troviamo il file completo del ResourceHandler in allegato.