Finalmente siamo arrivati all’ultima parte di quest’ultima guida. Sarà una cosa piuttosto veloce e facile, per cui non vi preoccupate, andrà tutto liscio ;) In questo articolo capiremo velocemente come aggiungere dei suoni e la musica al nostro gioco con Flixel. Vedremo il caricamento e quindi la riproduzione dei file audio.

Aggiungero dell’audio solamente in due dei tre stati del gioco: nel menù principale (sMainMenu) e nella schermata di gioco (sGameState).

Nel menù principale aggiungerò solamente un effetto sonoro da riprodurre alla pressione del tasto invio: iniziamo da qui.

Caricare un file audio con Flixel è molto semplice, e la procedura è molto simile a quella del caricamento di un’immagine. Vediamo per esempio il codice (commentato dove necessario) che ho aggiunto alla classe sMainMenu:

package
{
	// non dimentichiamo la direttiva di import
	import org.flixel.FlxSound;
	import org.flixel.FlxSprite;
	import org.flixel.FlxState;
	import org.flixel.FlxG;

	public class sMainMenu extends FlxState
	{
		[Embed(source='../graphics/main_menu.jpg')]		private var main_bg:Class;
		private var main_bg_sp:FlxSprite;

		// qui definisco il suono caricandolo con un oggetto di tipo class.
		[Embed(source = '../sounds/beep2.mp3')] private var sound1:Class;
		// e qui dichiaro un oggetto di tipo FlxSound che useremo
		private var sound11:FlxSound;

		private var cur1:gMenuCursor;

		override public function create():void
		{
			main_bg_sp = new FlxSprite(0, 0, main_bg);
			add(main_bg_sp);

			// ecco l'inizializzazione
			sound11 = new FlxSound();
			// e quindi il caricamento... il primo parametro di loadEmbedded è l'oggetto che rappresenta il suono
			// mentre il secondo specifica se il suono deve essere riprodotto continuamente oppure una sola volta
			sound11.loadEmbedded(sound1, false);

			cur1 = new gMenuCursor();
			cur1.x = 280;
			cur1.y = 363;
			add(cur1);

			FlxG.flash.start(0xff000000, 1);
		}

		override public function update():void
		{
			if (FlxG.keys.justPressed("ENTER"))
			{
				// il richiamo del metodo play permette di riprodurre il suono
				sound11.play();
				FlxG.fade.start(0xff000000, 1, Change);
			}
			super.update();
		}

		private function Change():void
		{
			FlxG.state = new sGameState();
		}
	}

}

Come avete visto è tutto molto intuitivo. Ecco cosa ho fatto:

  • Memorizzo i dati della canzone in un oggetto generico di tipo Class;
  • Dichiaro un oggetto di tipo FlxSound;
  • Carico la traccia tramite l’istruzione loadEmbedded;
  • Gestisco la traccia tramite l’oggetto FlxSound;

Spero non sia difficile da capire come meccanismo, in realtà è tutto qua e c’è poco ancora da sapere! Quello che vi consiglio vivamente è di “giocare” con i vari membri della classe FlxSound per imparare a gestire il volume ed aspetti simili. Ma ripeto, è sempre tutto estremamente facile.

Passiamo ora alla classe sGameState. Anche qui le cose non cambiano, le istruzioni sono sempre le stesse.

La direttiva di Import:

	import org.flixel.data.FlxAnim;
	import org.flixel.FlxSound;
	import org.flixel.FlxSprite;
	import org.flixel.FlxState;
	import org.flixel.FlxG;
	import org.flixel.FlxText;

Creazione degli oggetti necessari:

	[Embed(source = '../sounds/song1.mp3')] private var sound:Class;
	private var backsound:FlxSound;

	[Embed(source = '../sounds/cardswoop.mp3')] private var eff1:Class;
	private var swoopsound:FlxSound;

	[Embed(source = '../sounds/beep.mp3')] private var eff2:Class;
	private var beepsound:FlxSound;

	[Embed(source = '../sounds/beep2.mp3')] private var eff3:Class;
	private var beepsound2:FlxSound;

	[Embed(source = '../sounds/applause.mp3')] private var eff4:Class;
	private var applause_sound:FlxSound;

	[Embed(source = '../sounds/boo.mp3')] private var eff5:Class;
	private var boo_sound:FlxSound;

Inizializzazione degli oggetti:

	backsound = new FlxSound();
	backsound.loadEmbedded(sound, true);
	backsound.volume = 0.5;
	backsound.play();

	swoopsound = new FlxSound();
	swoopsound.loadEmbedded(eff1, false);

	beepsound = new FlxSound();
	beepsound.loadEmbedded(eff2, false);

	beepsound2 = new FlxSound();
	beepsound2.loadEmbedded(eff3, false);

	applause_sound = new FlxSound();
	applause_sound.loadEmbedded(eff4, false);

	boo_sound = new FlxSound();
	boo_sound.loadEmbedded(eff5, false);

Nota: per l’oggetto backsound (la canzone di sottofondo che ho utilizzato) ho modificato la proprietà “volume” per impostare un volume inferiore al normale. In questo modo anche gli effetti sonori saranno ben percepibili ;)

Ed infine, un’istruzione di esempio con l’uso di uno di questi oggetti:

if (WinControl())
{
	applause_sound.play();
	intstate = 5;
}

non riporterò gli altri per un motivo ben preciso: vorrei che foste voi ad individuarli nel codice (scaricabile da questo sito) in modo tale da poter capire in prima persona come funzionano le cose, senza imboccarvi riga per riga ;)

Detto questo penso non ci sia altro da dire, con l’aggiunta dei suoni abbiamo terminato anche il progetto di questo semplice gioco, e di conseguenza questa mini-linea di guide dedicate a Flixel. Le potenzialità di questo framework sono davvero immense, spero che qualcuno di voi continui a giocarci e a sperimentare. E magari mi faccia sapere pure se ha fatto qualche progresso!

Grazie a tutti per aver seguito la guida, alla prossima ;)

  • Share/Bookmark