Vi ricordate attachSound di Actionscript 2.0 ?
Si potevano attaccare dei sounds dalla libreria, proprio come fossero MovieClip e invece erano degli mp3 che avevamo in libreria.
Con Actionscript 3.0 il metodo attachSound è stato rimosso ( tanto per cambiare dirà qualcuno di voi... ), però niente paura, è rimasto semplice utilizzare in runtime un file mp3 che abbiamonella libreria del nostro FLA.
Dopo aver visto come creare e assegnare una classe ai suoni che abbiamo in libreria, adesso vedremo come fare la stessa cosa ma senza creare una classe per ogni suono, altrimenti se ipotizzando di avere un centinaio di suoni sarebbe davvero scomodo dover creare 100 file AS.

Creo un FLA che salvo con nome ' main.fla ' .
Importo 10 files mp3 diversi, in questo caso io uso dei sounds vocali e comunque per fare questa prova vi consiglio di utilizzare suoni brevi, da bottoni insomma.
Per ogniuno di loro assegno una classe in questo modo:
- click destro sul file, selezionare linkage ( concatenamento per chi ha Flash in italiano)
- nella finestra che si apre, attivo l'opzione ' esporta per Actionscript ', nel campo Class inserisco ' Sound0 '.
- clicco ok e a questopunto Flash midirà che non è stata trovata una classe con quel nome e dice che proseguendo ne creerà una lui. Clicchiamo ok.

Facciamo lo stesso procedimento per gli altri 9 suoni. Quindi assegnamo le classi Sound1, Sound2, Sound3, ecc ecc...

Istanzio 10 bottoni sullo stage assegnando loro un nome istanza ( ad esempio button_0_btn, button_1_btn, button_2_btn, ecc ecc... ).

Ora creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.utils.getDefinitionByName;
	import flash.media.Sound;
	import flash.events.MouseEvent;
	
	public class Main extends MovieClip
	{
		public function Main()
		{
			initLabels();
		}
		
		private function initLabels():void
		{
			for( var i:int=0;i < 10;i++)
			{
				var b:*=this.getChildAt(i);
				var button:Button=b;
				button.label='Sound'+i;
				button.addEventListener(MouseEvent.CLICK,playSound);
			}
		}
		
		private function playSound(m:MouseEvent):void
		{
			var className:Class=getDefinitionByName(m.currentTarget.label)as Class;
			var sound:Sound=new className();
			sound.play();
		}
	}
}
Risultato:










Analizziamo il codice

Metodi


initLabels();
Utilizzando un ciclo recupero tutti i bottoni che ho sullo stage, gli assegno un nome alla label ( l' etichetta del bottone che si leggerà ) e gli assegno un listener in ascolto dell' evento CLICK che chiamerà la funzione ( metodo ) playSound
for( var i:int=0;i < 10;i++)
{
var b:*=this.getChildAt(i);
var button:Button=b;
button.label='Sound'+i;
button.addEventListener(MouseEvent.CLICK,playSound );
}

playSound();
utilizzando la classe getDefinitionByName imposto il nome della label ( m.currentTarget è chi ha scaturito l' evento, quindi il bottone che è stato cliccato ) del bottone come nome della Classe che devo chiamare
var className:Class=getDefinitionByName(m.currentTarge t.label)as Class;
creo una istanza di quella classe ( che estende la classe Sound di sicuro in quanto la abbiamo aggiunta al linkage )
var sound:className=new className();
riproduco il suono
sound.play();

Stay tuned !