Pagine    Articoli    Prodotti    Forum    Cerca  
Nickname

Password


Non sei registrato?
Registrati a GPI qui!

Puoi anche attivare un vecchio utente GPI e chiedere una nuova password.
I Team

Mappa Team
I nostri utenti

Mappa Utenti
  Programmare un videogame in FLASH e Starling #4
Pubblicato da Andrea Venturi il 2012-10-18 20:15:25

"push the button!"

Ora che abbiamo creato due schermate, il menù e la schermata di gioco, dobbiamo collegarle.

Quindi in questo tutorial andremo a gestire l’evento di pressione dei bottoni, ma come sempre prima di scrivere il codice...

 

Momento teoria

Come abbiamo visto nei tutorial precedenti, starling ha dei tipi evento tutti suoi, come ADDED_TO_STAGE o ENTER_FRAME (simile a quallo di Flash).

 

Un altro tipo di evento che Starling ci mette a disposizione è l’evento TRIGGERED, molto simile all’evento del mouse CLICK in as3, ma la differenza è che viene sollevato solo dagli oggetti di tipo button.

 

Impostiamo i listener

Andiamo ad aprire la classe Menu per andare ad impostare i listener degli eventi della pressione del dito sui bottoni presenti nel nostro menù

addEventListener(Event.TRIGGERED, onTrigged);

A questo punto si deve andare a cambiare la schermata da quella di Menu a quella di gioco o da quella di gioco a quella del menù.

 

Bisogna creare un meccanismo che ci permetta di cambiare schermata con il minimo sforzo, magari che possa essere riutilizzato anche in progetti futuri, quindi andiamo ad implementare un nuovo tipo event.

 

Andiamo a creare una cartella dal nome events e al suo interno creiamo una classe dal nome CustomEvent che estenderà il tipo Event di Starling.

 

Prima di tutto diamo un nome a questo tipo di evento, per poter essere catturato

public static const CAMBIO:String = "cambiaSchermata";

Ora andiamo ad arricchire l’evento con un nuovo parametro, quindi creiamo la variabile dal nome parametri che sarà di tipo Object

public var params:Object;

e aggiungiamola al costruttore, per sicurezza diamo un parametro di default.

 

public function CustomEvent(type:String, _param:Object = null, bubbles:Boolean = false) 
{
super(type, bubbles);
params = _param;
}

Se vi state chiedendo il motivo dell’utilizzo di un tipo Object, bhe la risposta è semplice, perché in questo modo si può passare una struttura dati composta da [chiave]->[valore] che permette di passare più di un parametro e impostare il tutto durante il sollevamento dell’evento stesso.

In parole povere rendo generico l’evento e quindi riutilizzabile.

 

A questo punto andiamo a sollevare l’evento, andiamo nella classe Menu e nella gestione dell’evento TRIGGERED andiamo per prima cosa a testare quale button è stato premuto, dopo di che andiamo a sollevare l’evento con i parametri giusti, quindi torniamo nella classe Menu ed andiamo a scrivere la funzione onTriggled

 

private function onTrigged(e:Event):void 
{
	var pressed:Button = (e.target as Button);
	if (pressed == play)
	{
		dispatchEvent( new CustomEvent(CustomEvent.CAMBIO, { trg:"play" }, true));
	}
	else if (pressed == about)
	{
		//ancora nulla!
	}
}

Ora si deve ascoltare l’evento, quindi apriamo la classe Game e ci andiamo a posizionare sotto l’inizializzazione della classe Menu e aggiungiamo il nostro listener

screenMenu.addEventListener(CustomEvent.CAMBIO, onChange);

creiamo la funzione che gestirà l’evento, che in base ai parametri passati deve cambiare la schermata, ma come?

 

Momento teoria

Quindi bisogna creare il meccanismo per eseguire il cambio di scena.

Ovviamente io ne ho creato uno semplice, ma voi potete complicarlo a piacimento andando ad inserire quanti più effetti speciali vorrete.

 

Cambio di scena

L’idea è semplice, andiamo disabilitare una schermata, mentre l’altra è attiva, all’arrivo dell’evento di cambio scena, andiamo a disabilitare quella attiva e abilitiamo l’altra.

 

Quindi per procedere con questa soluzione servono due metodi nelle classi che definiscono le nostre schermate: initialize, disable.

 

Che nel caso della schermata di gioco StarField (per ora una versione semplice)

 

public function disable():void 
{
	visible = false;
}

public function initialize():void 
{
	visible = true;
} 

e per la schermata del Menu la funzione initialize è stata creata nel primo tutorial qundi andiamo ad aggiungere solo la funzione disable

public function disable():void 
{
	visible = false;
	if (hasEventListener(Event.ENTER_FRAME))
	{
		removeEventListener(Event.ENTER_FRAME, logoAnimation);
	}
	
}

A questo punto possiamo andare a completare la funzione che gestisce il nostro evento personalizzato, quindi torniamo in Game e andiamo a scrivere la funzione onChange 

 

private function onChange(e:CustomEvent):void 
{
  switch(e.params.trg)
  {
    case "play":
      screenMenu.disable();
      starField.initialize();
    break;
  }
}

 

Ora non vi resta che provare a compilare e vedere il risultato.



Ed ovviamente il link per i sorgenti.

Campagne crowfunding

Just One Line
Siamo presenti su

     
Copyright ©2016 - Manifesto - Privacy - Termini di Servizio - Community - Collaboratori - Contattaci