• 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

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

By IgnazioC | on 27 Agosto 2012 | 3 Comments
Corso programmazione videogiochi

corso-programmazione-videogame-cocos2d-06 Bentornati, dopo una piccola pausa estiva, al nostro corso di programmazione videogame per iPhone e iPad con cocos2d. Oggi vedremo un concetto che ci accompagnerà anche nella prossima lezione, parleremo infatti di come aggiungere una illusione di profondità ai nostri videgiochi in 2D.

Se avete giocato almeno ad un platform 2D più recente del primissimo Mario Bros, avrete sicuramente fatto caso che, nonostanze l’assenza di una terza dimensione, i programmatori riescono comunque a fornire un certo effetto di profondità.
Questo effetto viene ottenuto sfruttando un aspetto molto interessante e caratteristico della percezione visiva chiamato “parallasse”.

Wikipedia recita: “La parallasse è il fenomeno per cui un oggetto sembra spostarsi rispetto allo sfondo se si cambia il punto di osservazione.“.

Questo aspetto è quello che permette al cervello di ricostruire le informazioni sulla profondità da un’immagine che altrimenti sarebbe solo 2d. Poiché tra i due occhi c’è una certa distanza è come se cambiasse il “punto di osservazione” quindi nell’immagine recepita dai due occhi gli oggetti “cambiano” leggermente posizione rispetto allo sfondo. Questa differenza viene rapidamente calcolata dal nostro cervello e l’informazione viene utilizzata per ricavare i dati sulla profondità.

Questo fenomeno è chiaramente visibile ad occhio nudo su breve distanza, basta chiudere alternativamente gli occhi e fissare un oggetto vicino, ma è valido anche su scala astronomica, infatti la distanza tra la terra e i pianeti viene stimata effettuando due misurazioni in tempi diversi. Se la terra si trova in posizione diversa l’immagine che si ottiene è diversa e quindi si può calcolare la distanza.

Ok, dopo questa breve incursione del mondo della fisica torniamo al nostro corso per ripondere alla domanda che sicuramente vi starete ponendo: “Ok, bello ma io con cocos che cosa me ne faccio della parallasse?”.

Beh noi sfruttiamo il concetto inverso, se è vero che l’oggetto sembra spostarsi cambiando punto di osservazione, è vero anche il contrario, infatti noi faremo veramente spostare gli oggetti della nostra scena per simulare un cambio di punto d’osservazione. Semplice, no?

Facciamo un esempio più chiaro, immaginate di essere su un treno in corsa e guardare fuori dal finestrino, cosa vedete? Vetrete probabilmente le forme indistinte dei cespugli che scorrono velocissme, mentre sullo sfondo un paesaggio che scorre lento e, ancora più lontano, delle montagne che sembrano immobili. Oggi tenteremo di ricostruire questo effetto con le sprite e le classi cocos2d.

Facciamo i nostri esperimenti con la parallasse creando un nuovo progetto cocos2d, nell’immagine qui in basso potete vedere quello che andremo a realizzare:


come-aggiungere-profondita-giochi-corso-cocos2d-01

Sono evidenti in questa immagine i 4 livelli:

  • il primo piano verde scruro
  • il secondo piano verde chiaro
  • lo sfondo con le montagne innevate
  • il cielo con le nuvole

Ci serviranno le immagini, ma prima di darvi il link per il download ragioniamo un attimo e facciamo un paio di conti.

In questo esempio non faremo un vero e proprio scroll continuo, ma simuleremo la profondità muovendo gli oggetti sullo schermo a diversa velocità.
Ci serviranno quindi delle immagini più grandi dello schermo, così da porterle muovere avanti e indietro senza problemi, ma più grandi di quanto? Non è necessario che siano tutte della stessa dimensione!

Partiamo dal livello in primissimo piano, per visualizzare bene l’aminazione ci sposteremo verso destra di 160 punti, quindi ci servirà avere un’immagine lunga 480 + 160 punti = 640 punti. Tradotto in pixel significa 640 pixel per iphone non retina e 1280 per iphone con il retina display.

Ricordo che io utilizzo il simulatore in modalità “non retina” perché altrimenti avrei difficoltà a postare gli screenshot, ma ricordate per i vostri progetti di aggiungere anche le immagini con il suffisso “-hd”.

Per quanto riguarda i livelli successivi bisogna calcolare quanto sarà il loro spostamento quando il primo piano si sposterà di 160punti… la regola è che più il valore tende a zero e più sembrerà lontano e distante.

Facendo alcune prove decidiamo di spostare il livello secondario dell’80% rispetto al primo piano, mentre il livello con le montagne lo spostiamo del 40%, fanno rispettivamente 128 e 64 pixel.

Per il restante livello, quello con le nuvole, potremmo decidere di lasciarlo completamente fermo, ma per ottenere un effetto più carino lo spostiamo di un 10%, ovvero 16 pixel.

In questo modo otteniamo le seguenti misure:

  • Primo piano: 640px
  • Secondo piano 608px
  • Montagne: 544 px
  • Cielo: 496px

Trovate le immagini dentro il progetto che potete scaricare seguendo link a fondo lezione.

Quello che faremo sarà quindi incorporare le immagini adatte e poi aggiungere nel nostro progetto di copia un’istanza della classe CCParallaxNode.

Il codice che ci permette di ottenere questo risultato è il seguente:

-(id) init
{
        // always call "super" init
        // Apple recommends to re-assign "self" with the "super" return value
        if( (self=[super init])) {
        // ask director the the window size
                CGSize size = [[CCDirector sharedDirector] winSize];
       
        CCSprite *lev0 = [CCSprite spriteWithFile:@"liv_0.png"]; //1
        CCSprite *lev1 = [CCSprite spriteWithFile:@"liv_1.png"]; //2
        CCSprite *lev2 = [CCSprite spriteWithFile:@"liv_2.png"]; //3
        CCSprite *lev3 = [CCSprite spriteWithFile:@"liv_3.png"]; //4
               
        lev0.anchorPoint = CGPointMake(0, 0); //5
        lev1.anchorPoint = CGPointMake(0, 0); //6
        lev2.anchorPoint = CGPointMake(0, 0); //7
        lev3.anchorPoint = CGPointMake(0, 0); //8
       
        CCParallaxNode *paraNode  = [CCParallaxNode node]; //9
        [paraNode addChild:lev0 z:0 parallaxRatio:CGPointMake(0.1f, 0)positionOffset:CGPointMake(0, 0)]; //10
       
        [paraNode addChild:lev1 z:1 parallaxRatio:CGPointMake(0.2f, 0)positionOffset:CGPointMake(0, 60)]; //11
                [paraNode addChild:lev2 z:2 parallaxRatio:CGPointMake(0.4f, 0) positionOffset:CGPointMake(0., 45)];   //12    
        [paraNode addChild:lev3 z:3 parallaxRatio:CGPointMake(1, 0) positionOffset:CGPointMake(0, -20)];   //13
       
        [self addChild:paraNode z:0 tag:0001]; //14
CCMoveBy *move1 = [CCMoveBy actionWithDuration:2 position:CGPointMake(-160, 0)]; //15
CCMoveBy *move2 = [CCMoveBy actionWithDuration:2 position:CGPointMake(160, 0)];  //16
       
CCSequence *pingpong = [CCSequence actions:move1,move2, nil]; //17
CCRepeatForever *repeatPingpong = [CCRepeatForever actionWithAction:pingpong]; //18
[paraNode runAction:repeatPingpong]; //19
        }
        return self;
}

Vediamo in dettaglio cosa fa.

#1-4 Creo le 4 sprite utilizzando quattro immagini separate, vale qui lo stesso ragionamento che abbiamo fatto per gli sprite sheet. Il livello 0 è costituito dalle nuvole, il livello 4 dalle montagne in primo piano.

#5-8 Imposto l’anchorPoint della sprite nell’angolo in basso a sinistra. Non è un passo necessario, ma ci semplificherà i calcoli successivi

#9 Alloco un nodo di tipo CCPalarallaxNode, questo speciale oggetto è quello che automaticamente calcolerà lo spostamento delle 4 sprite.

#10-13 Aggiungo al CCPalarallaxNode le sprite che avevo creato, per ciascuna sprite possiamo impostare la sua percentuale di spostamento attraverso la proprietà parallaxRatio.
Ad esempio parallaxRatio:CGPointMake(0.1f, 0) vuol dire che seguirà gli spostamenti lungo l’asse X del 10%, mentre ventuali spostamenti lungo l’asse Y verranno ignorati.
Il secondo parametro positionOffset, specifica invece l’offset da assegnare alle singole sprite, come potete vedere io ho assegnato un offset verticale per far sì che si possano vedere tutte le sprite.

#14 Aggiungo il CCPalarallaxNode alla scena corrente.

#15 – 16 Creo due azioni, per muovere il livello.

#17 Inserisco le due azioni all’interno di una CCSequence

#18 Creo una CCRepeatForver utilizzando la sequenza appena creata

#19 Eseguo l’azione. È importante notare che noi muoviamo l’intero CCPalarallaxNode e lui si occupa di muovere tutte le sprite al suo interno in funzione del parallaxRatio che abbiamo impostato.

In questo modo siamo riusciti ad ottenere con molta semplicità un effetto di simulazione tridimensionale.

Potete scaricare l’intero progetto da qui:

Ed ecco il video in cui potrete vedere il risultato finale:



Share this story:
  • tweet

Tags: CCNode cocos2dcome creare giochi iPhonecorso cocos2dprofondità cocos2dprofondità videogame 2d

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

  • 5. Le action in Cocos2D

    31 Luglio 2012 - 5 Comments
  • 02. Scopriamo la struttura di un videogioco cocos2d e creiamo la nostra prima animazione

    7 Luglio 2012 - 10 Comments
  • 01. Introduzione a cocos2d, installazione e primo progetto

    29 Giugno 2012 - 17 Comments

Author Description

3 Responses to “6. Come aggiungere profondità ai nostri videgiochi in 2D”

  1. 27 Agosto 2012

    06. Aggiungere profondità ai videogame | Corso gratuito di programmazione videogame per iPhone e iPad | Vivi Capena

    […] Siete pronti dunque per affrontare la nuova lezione? Allora su le maniche e riprendiamo a sperimentare con la sesta lezione che trovate al seguente indirizzo. […]

  2. 27 Agosto 2012

    06. Aggiungere profondità ai videogame | Corso gratuito di programmazione videogame per iPhone e iPad - iPhone Italia Blog

    […] Siete pronti dunque per affrontare la nuova lezione? Allora su le maniche e riprendiamo a sperimentare con la sesta lezione che trovate al seguente indirizzo. […]

  3. 27 Agosto 2012

    06. Aggiungere profondità ai videogame | Corso gratuito di programmazione videogame per iPhone e iPad | Nextrack

    […] Siete pronti dunque per affrontare la nuova lezione? Allora su le maniche e riprendiamo a sperimentare con la sesta lezione che trovate al seguente indirizzo. […]

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