Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

CCDirector e CCScene, gestire livelli e scene

Come comporre i livelli del gioco con CCScene e integrare tutte le transizioni e i cambi di scenario con CCDirector
Come comporre i livelli del gioco con CCScene e integrare tutte le transizioni e i cambi di scenario con CCDirector
Link copiato negli appunti

La classe CCDirector è una classe fondamentale di cocos2d-iPhone. Adotta il pattern singleton e per ottenere l'oggetto di tipo CCDirector dovrete usare solo il seguente codice:

CCDirector * director = [CCDirector sharedInstance];

Dicevamo che questa classe è fondamentale perché consente di gestire oggetti di tipo CCScene. Possiamo immaginare una scena come un livello di Angry Birds o Trainyard o Cut The Rope. Prima o poi c'è bisogno di caricare una nuova scena e questo può essere fatto chiedendo al CCDirector di sostituire la scena corrente con la successiva.

Per eseguire una scena dovrete utilizzare il metodo runWithScene: di CCDirector.

CCScene * myScene = ...;
[[CCDirector sharedDirector] runWithScene:myScene];

CCDirector è in grado di contenere più di una scena contemporaneamente: uno stack di scene quindi. Quando una scena è in esecuzione e viene eseguito il push (ovvero viene aggiunta allo stack) di una nuova scena, la scena in esecuzione viene messa in pausa e la nuova scena viene eseguita.

Figura 15. Stack (fonte:Wikipedia)
Stack (fonte:wikipedia)

Vale la regola secondo cui soltanto la scena in cima allo stack sarà in esecuzione e quindi sarà visualizzata e giocabile dall'utente. Se successivamente la scena in esecuzione viene rimossa, allora la scena che precedentemente era stata messa in pausa tornerà in esecuzione.

In genere è sconsigliabile caricare nello stack del CCDirector più di una scena alla volta, sebbene solo l'ultima sia in esecuzione infatti le altre scene nello stack tenderanno a consumare memoria con conseguente degrado delle performance.

Esistono delle eccezioni. La funzionalità di pausa del videogioco, ad esempio, in genere richiede di mostrare una schermata (una nuova scena) con la possibilità di tornare immediatamente al punto esatto in cui il gioco era stato lasciato. In questo caso ha senso eseguire il push della scena di pausa e lasciare che il CCDirector metta in pausa il livello.

Quando l'utente uscirà dalla schermata di pausa basterà rimuovere la scena della pausa e automaticamente il CCDirector tornerà a eseguire la scena del livello.

I metodi di CCDirector per la gestione delle scene sono:

Metodo Descrizione
runWithScene:(CCScene*)scene; Avvia il main loop di CCDirector caricando la scena passata come parametro. Deve essere chiamato solo con la prima scena. Non deve essere chiamato se c'è già una scena in esecuzione
pushScene:(CCScene*)scene; Mette in pausa la scena attualmente in esecuzione, aggiunge quella passata come parametro in cima allo stack e la esegue. Deve essere chiamato soltanto nel caso ci sia già una scena in esecuzione
popScene; Rimuove e distrugge la scena attualmente in esecuzione (distruggendo quindi tutti i nodi in essa contenuta e liberando la memoria allocata). Inoltre recupera dallo stack l'ultima scena messa in pausa e la esegue. Deve essere eseguito soltanto se c'è una scena in esecuzione. Se c'è una sola scena nella pila allora l'esecuzione viene terminata
popToRootScene; Rimuove e distrugge tutte le scene dallo stack tranne l'ultima (ovvero quella inserita nello stack prima di tutte le altre) che viene fatta uscire dalla pausa e riportata in esecuzione. Deve essere eseguito soltanto se c'è una scena in esecuzione. Se c'è una sola scena nello stack allora l'esecuzione viene terminata.
replaceScene:(CCScene*)scene; Rimuove la scena correntemente in esecuzione, la distrugge liberando la memoria occupata e la sostituisce con la nuova scena passata come parametro. Deve essere eseguito soltanto se c'è almeno una scena in esecuzione
pause; Mette in pausa la scena attualmente in esecuzione
resume; Riprende l'esecuzione della scena attualmente in cima allo stack

Ti consigliamo anche