Squillino le trombe e rullino i tamburi! Mettete da parte i social network, dite addio a tumblr e 9gag perché sta per iniziare, qui su devAPP in esclusiva solo per voi un corso sulla realizzazione di videogiochi per iPhone e iPad.
Su questa board abbiamo pubblicato centinaia di tutorial, di guide e di articoli tecnici, ma per questo argomento abbiamo pensato che non fosse di il caso di dare un semplice “assaggio” ma di seguire la strada già percorsa con il corso di programmazione C e fornire un vero e proprio corso completo, articolato in “diverse” lezioni (il numero reale è attualmente sconosciuto persino all’autore) che partano dalle basi e vi guidino fino alla creazine del vostro videogioco di successo da vendere sull’App store.
Prerequisiti
Quali saranno i prerequisiti di questo corso? Pochi: non dovrete essere dei guru su iOS, basta che abbiate però familiarità con il linguaggio Objective-C, perché lo useremo parecchio! Vi aiuterà inoltre avere delle competenze in ambito di OOP (Object Oriented Programming) perché ormai, come avrete intuito, competenze simili oggi servono anche per andare dal panettiere… e poi cos’altro? Ah, certo! Vi servirà voglia di giocare con i videogiochi, perché dovrete pur testare il vostro lavoro, no? Così se vostra moglie o vostra madre vi rimprovera di passare troppo tempo davanti ai videogiochi, potrete sempre risponderle che state studiando! 🙂
Introduzione al corso
Anche se questo corso sarà incentrato su Cocos2d vorrei fare un passo indietro e parlare, oggi, di che cosa significa programmare un videogioco e quali sono le differenze rispetto alla programmazione di un’applicazione classica.
Tutti conosciamo la struttura di un’applicazione classica dotata di interfaccia grafica, l’applicazione si avvia ed entra in quello che viene chiamato in gergo “main loop” cioè un ciclo in cui l’applicazione verifica se ci sono stati input da parte dell’utente ed in tal caso esegue il codice relativo ed aggiorna l’interfaccia grafica:

Un videogioco non è diverso da questo punto di vista, c’è però una piccola ma significativa differenza:
nelle applicazioni standard la fase di rendering non avviene se non c’è stato un evento, mentre nella programmazione dei videogiochi il rendering è fissato con un certo intervallo di tempo ed avviene comunque: indipendentemente dagli eventi ricevuti.
Può accadere che una fase di update piuttosto lunga rallenti la frequenza di rendering e questo è quello che succede quando in molti videogiochi, nei momenti più impegnativi, il gioco inizia ad andare “a scatti”. Questo significa che la fase di update è durata più del previsto (magari perché ci sono molti nemici nello schermo o particolari effetti) e quindi diventa visibile ad occhio nudo l’intervallo di tempo tra un rendering ed il successivo.
Per avere un’idea di massima il tempo di rendering di default di cocos2d è di 0,017 secondi ovvero 1/60 di secondo ed otteniamo quindi una frequenza di aggiornamento pari a 60 frame per secondo (fps). Considerando che lo standard televisivo è fissato a 25 fps può sembrare inutile o addirittura dannoso averlo fissato a 60 fps, ma in realtà non è così perché 25fps significa un aggiornamento ogni 0.04 secondi che potrebbe, in certi casi, far percepire un certo “ritardo” tra i controlli e la risposa del gioco.
Il framerate minimo accetabile dipende ovviamente dal tipo di gioco che volete realizzare, se voleste riproporre una versione iPad di Unreal Tournament 3, allora preparatevi a sentirvi dire che è ingiocabile se scende al di sotto dei 40 fps, se invece state realizzando un gioco di scacchi a tutti sembrerà perfetto anche a 10fps.
Indipendentemente dal tipo di gioco che state pianificando, non penso di peccare di generalità se dico che il gioco sarà composto da alcune scene, che su queste scene ci saranno degli oggetti che interagiscono tra di loro e con l’utente rispondendo agli eventi in maniera diversa, a seconda dello stato in cui si trovano e lo stato generale del gioco. Ci sarà probabilmente da gestire dei suoni, delle risorse grafiche come immagini e video e ci saranno da gestire dei dati per il salvataggio dello stato di gioco e delle classifiche.
Benché questa descrizione sia tanto generica da accogliere dentro di se praticamente qualsiasi gioco pensabile è già sufficiente per tracciare un primo schema dei blocchi che costituiscono il motore di un un videogame.
Game State Manager
Difficilmente un gioco si compone esclusivamente della schermata di gioco, ma molto più probabilmente ci saranno delle altre schermate, come ad esempio un menù iniziale, un’help, una parte delle opzioni e quello che più conta è che lo stesso input (un tap, uno swipe) deve essere gestito in maniera diversa a seconda dello stato in cui si trova l’applicazione. Simulando il comportamento di una macchina a stati finiti.
Useremo spesso il termine “macchina a stati finiti” e forse è il caso di spiegare brevemente di cosa si tratta. Una macchina a stati finiti o anche “automa a stati finiti” è un modello che che può trovarsi in un solo stato alla volta, che da quello stato può passare ad un numero finito di stati in una transazione atomica. Inoltre a parità di input lo stato raggiunto dipende dallo stato in cui si trova.
Potremmo pensare ad un semaforo come una macchina a stati finiti: quando si trova nello stato rosso ed il vigile preme il pulsante passa allo stato verde, quando è sullo stato verde ed il vigile preme lo stesso pulsante passa allo stato giallo e poi allo stato rosso e si ricomincia. Non c’è verso con il pulsante di far passare da rosso a giallo e come si può intuire il numero di configurazioni possibili è finito.
Un videogame è paragonabile ad un automa a stati finiti perché da uno stato o configurazione che comprende tutto, dalla scena attualmente visibile allo stato dei personaggi nel gioco (e tanto altro) dipende in maniera diretta la risposa ad un input.
Può sembrare un ragionamento un po’ strambo a prima vista, ma vi assicuro che ragionare in termini di stati aiuta il programmatore non solo nella programmazione dei videogiochi, ma anche nella realizzazione delle applicazioni standard.
Graphics Engine
Il motore grafico in un gioco è quello che si occupa di disegnare sullo schermo quanto abbiamo richiesto. Esisono diversi livelli di astrazione, possiamo usare cocos2d o qualche altro engine di alto livello per facilitarci il lavoro oppure, se ne abbiamo il coraggio, possiamo passare a lavorare direttamente con le OpenglES, che sono il modo più a basso livello che abbiamo per dire alla scheda grafica di disegnare qualcosa sullo schermo.
Gestore degli eventi
È responsabile di gestire gli eventi e di informare gli oggetti del gioco che sono interessati a quell’evento.
Per fare un’esempio supponiamo di aver creato un pulsante all’interno del nostro videogioco, il pulsante comunicherà al gestore degli eventi di essere interessato ai tap sulla sua area, così il gestore degli eventi quanto riceverà dal sistema operativo un evento tap lo esaminerà e se ricade nell’area del pulsante lo avviserà dell’accaduto. Sarà poi il pulsante a decidere cosa fare una volta ricevuta questa informazione.
Sound engine
Ogni videogioco ha dei suoni, una colonna sonora o degli effetti speciali ed è quindi necessario che si crei un responsabile dell’audio per concentrare compiti e responsabilità.
Data Engine
In alcuni casi è necessario creare anche un gestore dei dati, che si occupi di salvare su disco lo stato dell’applicazione e successivamente sia anche in grado di ricreare lo stesso stato usando le informazioni presenti sul file.
Conclusioni
Abbiamo parlato di funzionalità ed abbiamo detto che sono pressocché indipendenti dal gioco da realizzare e questo significa essenzialmente che potrebbero essere racchiuse in un framework e riutilizzate poi in tutti i progetti.
Sarebbe bello, no?
Vi farà piacere allora sapere che siamo davvero molto fortunati, perché ci hanno già pensato ed hanno anche deciso di rilasciare il tutto con licenza opensource cosicché possiamo utilizzare tutte queste funzionalità (e molte altre) senza dover scrivere migliaia di righe di codice.
Sto chiaramente parlando di cocos2d, al momento, il framework opensource più diffuso per la piattaforma iOS.
Nella prossima lezione faremo un primo incontro con questo bellissimo framework, vedremo nel dettaglio come scaricarlo ed installarlo sui nostri mac e analizzeremo le sue potenzialità esaminando qualche progetto di esempio disponibile in rete.
Alla prossima!
28 Responses to “00. Introduzione | Corso di programmazione videogame con cocos2d”
22 Giugno 2012
Corso gratuito di programmazione videogame per iPhone e iPad con cocos2d by devAPP.it - iPhone Italia Blog[…] Le basi ve le diamo noi, tutto il resto.. dipende dalla vostra fantasia! Siete pronti per iniziare? Allora bando alle ciance e partiamo con la prima lezione introduttiva del corso, che potete raggiungere seguendo il seguente indirizzo. […]
22 Giugno 2012
tommasofinalmente! siete grandi!! Non vedo l’ora che arrivi il prox tutorial…!
22 Giugno 2012
Vivi Capena | News e info da capena e i suoi cittadini[…] Le basi ve le diamo noi, tutto il resto.. dipende dalla vostra fantasia! Siete pronti per iniziare? Allora bando alle ciance e partiamo con la prima lezione introduttiva del corso, che potete raggiungere seguendo il seguente indirizzo. […]
22 Giugno 2012
MarcoCiao a tutti e grazie per questo bellissimo corso. Volevo solo chiedere quando uscirà la prossima lezione 🙂
22 Giugno 2012
EdoardoCiao! Innanzitutto complimenti per l’iniziativa che, a mio avviso, avrà sicuramente un mare di visite!
Comunque volevo farti una domanda…
Se io non ho mai lavorato con l’objective C, posso comunque seguire il corso o devo necessriamente impararlo?
Grazie in anticipo 🙂
Edoardo
22 Giugno 2012
CarloChe versione di xcode utilizzerete?
22 Giugno 2012
Corso gratuito di programmazione videogame per iPhone e iPad con cocos2d by devAPP.it « DiscoveryInfos – Breaking news from the world[…] Le basi ve le diamo noi, tutto il resto.. dipende dalla vostra fantasia! Siete pronti per iniziare? Allora bando alle ciance e partiamo con la prima lezione introduttiva del corso, che potete raggiungere seguendo il seguente indirizzo. […]
22 Giugno 2012
GianlucaPer ora siamo alle 4.2 giusto?
22 Giugno 2012
AndreaScusate la domanda abbastanza niubba.. ma per programmare con cocos2d è obbligatorio avere un mac o gira anche su windows?
22 Giugno 2012
PieroGrandi bravissimi!!!!!!! Ansioso di imparare
22 Giugno 2012
Rino Picardi@tommaso: @Marco: le lezioni saranno a cadenza settimanale, una a settimana, in modo tale che possiate approfondire ed esercitarvi su quanto appreso nei giorni successivi alla lezione
@Edoardo: grazie per i complimenti, Objective-C è indispensabile.. Così come è richiesta padronanza dei concetti alla base di OOP
@Carlo: @Gianluca: l’ultima versione, ovvero la 4.3.3, ma potrebbe essere che ne escano altre strada facendo..
22 Giugno 2012
devApp da il via ad un corso gratuito di programmazione videogiochi per iDevice[…] Se l’iniziativa è di vostro interesse potete visitare il sito ufficiale devapp.it oppure cliccare qui per andare direttamente alla prima parte – introduzione – del nuovo corso. […]
22 Giugno 2012
MarcoCiao. So che l’hanno già chiesto, ma si può usare anche Windows?? Grazie 🙂
22 Giugno 2012
DanieleInnanzitutto complimentissimi!!!!
Un’unica domanda peró: quante settimane durerà il corso? Grazie anticipatamente della risposta e buona serata!! 🙂
22 Giugno 2012
Corso di programmazione videogame con cocos2d | YourLifeUpdated - News hi-tech, tecnologia, recensioni cellulari, smartphone Android, iPhone, iPad, Windows Phone, Symbian, guide e programmi per Windows e Mac[…] La prima lezione di tale corso è già online e disponibile direttamente al seguente link. […]
22 Giugno 2012
EdoardoRino grazie innanzitutto per la risposta!
Mi puoi dire se e dove posso qui su devapp imparare le nozioni di objective c richieste?
Grazie ancora
Edoardo
23 Giugno 2012
LeoVi prego… Ampliate un po’ il corso parlando anche di semplici app! L’impegno è grande, anche per me che non conosco niente dei linguaggi citati
23 Giugno 2012
Gennaro Esposito (e i 7 figli suoi)Per programmare con Xcode ci vuole un mac
24 Giugno 2012
JacopoNo va solo su Mac perché xCode è sviluppato da Apple quindi lo fanno girare solo su Macintosh… questione di business!
24 Giugno 2012
JacopoSecondo me non importa quante settimane dura il corso, anzi più dura e meglio è perché avrai il tempo di sviluppare e di apprendere ciò che viene scritto nella guida, si sa che per creare un applicazione perfetta ci vuole tempo 😉 non ti preoccupare e sii ottimista come me! xD
25 Giugno 2012
Corso Gratuito di Programmazione Videogiochi (Videogames) Per iPhone ed iPad | Apple Notizie[…] Non dovrai essere dunque un mega esperto per addentrarsi in questo mondo ed è già disponibile online la prima lezione introduttiva: guarda ora la lezione introduttiva su devapp.it! […]
25 Giugno 2012
Vivi Capena | News e info da capena e i suoi cittadini[…] Non dovrai essere dunque un mega esperto per addentrarsi in questo mondo ed è già disponibile online la prima lezione introduttiva: guarda ora la lezione introduttiva su devapp.it! […]
25 Giugno 2012
EdoardoRagazzi mi dite dove posso imparare l’objective-c necessario per questo corso??
27 Giugno 2012
RubenE per uno che ha un windows sto corsoooo e inutileee
27 Giugno 2012
JacopoAncora niente??? Quanto scriverete la prossima lezione??
28 Giugno 2012
Redazione@Marco: @Ruben: Per seguire il corso (e per programmare iPhone, iPod, iPad e Mac in generale) serve un Mac
@Daniele: non sappiamo ancora quante settimane durerà il corso, strada facendo potremmo decidere, in base anche alle richieste, di inserire nuove lezioni.
@Edoardo: @Leo: Su devAPP ci sono diverse guide teoriche che aiutano ad apprendere il linguaggio, indispensabile sicuramente anche un buon testo.. ce ne sono sia in italiano che in inglese, trovate qualche segnalazione nella sezione “Libri e Manuali” di devAPP.
@Jacopo: Proporremo una lezione a settimana, in modo che possiate approfondire gli argomenti proposti. Per ora sembra poco, ma quando le cose inizieranno a complicarsi una settimana di “pausa” non vi basterà più 😛
29 Giugno 2012
JacopoCapito! 😀
6 Luglio 2012
DanieleGrazie per la grande opportunità che ci date! Anche io sono un neofita dei linguaggi sopracitati e vorrei buttarmi subito sullo studio degli stessi. Spero non ci voglia troppo tempo ad apprendere altrimenti resterò indietro con le vostre lezioni! C’è un testo unico completo fra quelli proposti? Preferirei un testo cartaceo in modo da poterlo portare ovunque e studiarci sopra… ci avviserete in qualche modo quando una nuova lezione sarà online? Grazie molto davvero per l’impegno e la passione che ci mettete… a prestissimo 🙂