• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

02. Scopriamo la struttura di un videogioco cocos2d e creiamo la nostra prima animazione

By IgnazioC | on 7 Luglio 2012 | 10 Comments
Corso programmazione videogiochi

Corso programmazione videogame con cocos2d Lezione 02 Nella precedente lezione abbiamo esaminato il codice generato dal templare di cocos2d e abbiamo introdotto tanti termini come scena, layer, director, ma non abbiamo dato una spiegazione organica di come tutto ciò funzioni all’interno dei un’applicazione cocos2d.
Un videgioco, nella terminologia cocos2d, è costituito da diverse scene, tutte istanze della classe CCScene. Come nel caso dei viewController, sta allo stile del programmatore decidere cosa appartiene ad una scena oppure ad un’altra. Di solito il menù principale, i livelli, e le animazioni tra i livelli vengono considerate scene diverse.


corso-cocos2d-struttura-di-un-videogioco-animare-sprite-01

Il director (classe CCDirector) è il regista che, come nel cinema, si occupa di passare da una scena alla successiva. In ogni applicazione cocos2d troviamo un solo director e, per comodità, la classe è stata creata seguendo il pattern singleton. Questo significa che da tutta l’applicazione basterà richiamare il metodo:

CCDirector *director = [CCDirector sharedDirector];

per ottenere un riferimento all’unica istanza presente in tutta l’applicazione.

Ciascuna scena è costituita da diversi layer (classe CCLayer) che possono essere aggiunti alla scena come “child” allo stesso modo di come una UIView può avere delle altre UIView come subview.

I layer sono anche gli oggetti che si occupano di gestire gli eventi touch e l’accelerometro. Possono essere associate inoltre delle azioni o particolari effetti ad un intero lager, ottenendo così risultati molto particolari.


corso-cocos2d-struttura-di-un-videogioco-animare-sprite-02

Su ciascun layer si trovano gli oggetti con i quali interagiremo più spesso, le sprite (classe CCSprite). Le sprite sono spesso costituite da immagini png, che possono essere animate e possono eseguire moltissime azioni, che vedremo più avanti in questo corso.

Ma qual è la gerarchia delle classi che abbiamo appena visto? Alla base di tutto c’è la classe CCNode, che rappresenta un concetto astratto di oggetto posizionato sullo schermo. Un CCNode non è direttamente visualizzabile sullo schermo, ma fa da superclass a tutto il resto.
Ereditano infatti direttamente dalla classe CCNode tutte e tre le altre classi che abbiamo appena visto: CCLayer, CCScene e CCSprite.


corso-cocos2d-struttura-di-un-videogioco-animare-sprite-03

Torniamo adesso a guardare il codice prodotto nel progetto della lezione precedente, il classico “hello world”. Riconosciamo subito la classe “HelloWorldLayer” e dovrebbe sorprenderci l’assenza di una classe che erediti da CSScene, come mai?

La risposta è che in questo primo esempio non è stata necessaria la creazione di una scena specifica ed infatti è presente un metodo di classe +(CCScene *)scene all’interno della classe “HelloWorldLayer”, che si occupa di istanziarne una generica.

Ricordate la riga di codice che visualizza la prima scena del progetto hello world?

[[CCDirector sharedDirector] runWithScene: [HelloWorldLayer scene]];

Qui è visibile l’approccio, forse non chiarissimo, usato da questo progetto: il director chiede alla classe “HelloWorldLayer” (che è un layer) la scena da visualizzare.

Il codice del metodo +(CCScene *)scene è il seguente

+(CCScene *) scene
{
CCScene *scene = [CCScene node]; //1
HelloWorldLayer *layer = [HelloWorldLayer node]; //2
[scene addChild: layer];        //3
return scene;                //4
}

#1 Creiamo un’istanza di una generica scena attraverso il metodo di classe node. Il metodo node non è dichiarato nella classe CCSCene, ma e un metodo della classe CCNode e, potenza della ereditarietà, possiamo usarlo anche in questo caso. Andate pure a guardare il codice, vi accorgerete che è solo un alloc-init-autorelease.

#2 Creiamo una istanza del layer, utilizzando sempre il metodo node. Anche in questo caso è possibile perché CCLayer eredita da CCNode.

#3 Aggiungiamo il layer come “child” alla scena.

#4 Il metodo ritorna la scena appena creata.

Per divertirci un po’ proviamo a modificare questo progetto. Inseriamo la prima sprite e animiamola! Non ci crederete, basteranno davvero pochissime rige di codice!

Salvate l’immagine che vedete qui:


corso-cocos2d-struttura-di-un-videogioco-animare-sprite-04

e copiatela all’interno della cartella “resources” del progetto “hello world”.

Una precisazione, questa immagine è pensata per essere usata su iPhone privi di retina display, perché se usassi un simulatore con il retina avrei problemi ad inserire gli screenshot.

Modificate il codice del metodo -(id)init della classe “HelloWorldLayer”. Questo metodo viene richiamato quando si inizializza il livello (riga 2 del precedente codice) e come si può intuire da queste righe:

CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64];
CGSize size = [[CCDirector sharedDirector] winSize];
label.position =  ccp( size.width /2 , size.height/2 );
[self addChild: label];

disegna a video il testo Hello World usando una istanza della classe CCLabelTTF (che vedremo più avanti). Sostituite le righe precedenti con queste:

CGSize size = [[CCDirector sharedDirector] winSize]; //1
CCSprite *zepppelin = [CCSprite spriteWithFile:@"zeppelindevapp.png"]; //2
[zepppelin setPosition:ccp(size.width + zepppelin.boundingBox.size.width,size.height / 2)]; //3
[self addChild:zepppelin]; //4
id moveAction = [CCMoveTo actionWithDuration:5.0f position:ccp(-1 * zepppelin.boundingBox.size.width, size.height/2)]; //5
[zepppelin runAction:moveAction]; //6

Vediamo cosa abbiamo appena fatto:

#1 Otteniamo la dimensione dello schermo dal director
#2 Creiamo la sprite utilizzando l’immagine png che abbiamo scaricato.
#3 Impostiamo la posizione iniziale della sprite, il metoso “setPosition” modifica la posizione del centro della sprite.
#4 Creiamo la nostra prima azione, ne vedremo molte altre in seguito, con una sola riga di codice impostiamo la durata (5 secondi) e la posizione da raggiungere.
#5 Eseguiamo l’azione.

Il risultato non sarà ancora un gioco in grado di assicurarci fama e gloria, ma per aver scritto solo due righe di codice il risultato non è niente male 😉

Alla prossima lezione!


corso-cocos2d-struttura-di-un-videogioco-animare-sprite-05

Share this story:
  • tweet

Tags: animazioni cocos2dCCDirector cocos2dCCLayer cocos2dCCNode cocos2dCCScene cocos2dCCSprite cocos2dstruttura di un videogame

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • 6. Come aggiungere profondità ai nostri videgiochi in 2D

    27 Agosto 2012 - 3 Comments

Author Description

10 Responses to “02. Scopriamo la struttura di un videogioco cocos2d e creiamo la nostra prima animazione”

  1. 7 Luglio 2012

    02. Creiamo la nostra prima animazione | Corso gratuito di programmazione videogame per iPhone e iPad - iPhone Italia Blog

    […] non vi resta che correre a studiare la seconda lezione del corso (che trovate direttamente al seguente indirizzo) e inizierete così a […]

  2. 7 Luglio 2012

    02. Creiamo la nostra prima animazione | Corso gratuito di programmazione videogame per iPhone e iPad | Vivi Capena

    […] non vi resta che correre a studiare la seconda lezione del corso (che trovate direttamente al seguente indirizzo) e inizierete così a […]

  3. 7 Luglio 2012

    AndreaS

    vi siete sbagliati con i numeri delle descrizioni delle righe, infatti il #4 è “[self addChild:zepppelin];”: ossia l’aggiunta della sprite alla scena e non la creazone della prima azione che è invece la #5

  4. 7 Luglio 2012

    02. Creiamo la nostra prima animazione | Corso gratuito di programmazione videogame per iPhone e iPad | Tutto App

    […] non vi resta che correre a studiare la seconda lezione del corso (che trovate direttamente al seguente indirizzo) e inizierete così a […]

  5. 7 Luglio 2012

    Carlo

    Grande guida!:) Continuate così!

  6. 9 Luglio 2012

    RaulLoL

    #4 Creiamo la nostra prima azione, ne vedremo molte altre in seguito, con una sola riga di codice impostiamo la durata (5 secondi) e la posizione da raggiungere.

    Potete almeno spiegare meglio la logica delle posizioni ? visto che non si riesce a capire bene…..

  7. 10 Luglio 2012

    Miky_Many

    a me non funziona..mi genera un eccezione nel Thread 1 : EXC_BAD_ACCESS …non so

  8. 14 Luglio 2012

    Io

    Ieri non sarebbe dovuta uscire la lezione 3?
    Dai che sono anzioso di continuare 🙂

  9. 18 Luglio 2012

    Lorenzo

    A me dà problemi con l’immagine..o meglio se imposto come immagine una qualsiasi di quelle già presenti nella cartella Resources funziona tutto bene, se invece provo ad usarne una nuova mi dà errore nel main “signal SIGABRT” dovuto probabilmente al fatto che non mi “trova” l’immagine e quindi non la carica, causando l’errore..qualcuno ha idea del perché?

    2012-07-18 18:51:21.821 stickman[5821:1be03] -[CCFileUtils fullPathFromRelativePath:resolutionType:] : cocos2d: Warning: File not found: Copia.png

  10. 19 Luglio 2012

    Ignazioc

    ti ricordo che il mac è di default case-insensitive, mentre l’iphone si. quindi verifica se il file si chiama Copia o copia

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO