SVILUPPO DI VIDEOGIOCHI SU PIATTAFORMA ANDROID: TUTTA LA POTENZA SU DUE DIMENSIONI

2,791 views
2,714 views

Published on

Into the game. Le basi concettuali. Cosa sono sprites e i tiles. In cosa consistono gli effetti di scrolling e di parallasse. Come si realizzano le animazioni dei fondali e degli sprites . Quali sono gli strumenti adatti per realizzare la grafica, gli effetti sonori? Usare Allegro Sprites Editor, Tiled Map Editor, GiMP, GrafX2. Quali tecnologie scegliere per scrivere un gioco? Panoramica fra gli engine 2D free ed a pagamento attualmente disponibili sul mercato. Introduzione ad uno di questi. AndEngine. Come rendere redditizio lo sviluppo di un gioco. Scelta del target, scelta delle logiche di distribuzione, sceglierlo come veicolo pubblicitario.Impostare e gestire la logica del gioco con AndEngine. Come creare il corretto loop per la gestione del flusso del gioco; Impostazione del GameLoop e corrispondenti azioni. Concetti di multithreading applicati al gamingGestire le animazioni con AndEngine. Come creare grafica ed animazioni e come integrarle ed utilizzarle. Gestire gli eventi e le collisioni sprite-sprite e sprite-background. Impariamo a gestire sprites e tiles. In cosa consistono gli effetti di scrolling, parallasse e come si ottengono. Come si realizzano le animazioni dei fondali e degli sprites.

Published in: Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,791
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
43
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

SVILUPPO DI VIDEOGIOCHI SU PIATTAFORMA ANDROID: TUTTA LA POTENZA SU DUE DIMENSIONI

  1. 1. Sviluppo di videogiochi supiattaforma AndroidInto the gameMassimo CarliDanilo Riso
  2. 2. Obiettivo• Definire le basi concettuali: cosa vuol dire sviluppare un videogioco? Tipologie e categorie di videogiochi;• Definire quali possono essere gli strumenti adatti per sviluppare un videogioco;• Panoramica delle tecnologie e degli engine 2D utilizzabili a tal scopo;• Introduzione ad uno di questi: AndEngine;• Elementi grafici ed effetti sonori;• Come rendere redditizio lo sviluppo di un videogioco;
  3. 3. Cosa vuol dire sviluppare unvideogioco?• Lo sviluppo di un videogioco, per quanto possa sembrare banale come definizione, e’ la summa dell’utilizzo di effetti grafici e sonori, legato ad un certo livello di interattivita’ con l’utilizzatore, al fine di catturare parzialmente o completamente l’attenzione di quest’ultimo, con scopi totalmente ludici e di divertimento. Talvolta anche l’angoscia ed il terrore possono essere sorgente di coinvolgimento e divertimento per l’utilizzatore.• Un po’ meno banali sono i metodi, tecnici e psicologici, attraverso i quali e’ possibile, da parte dello sviluppatore, riuscire ad ottenere questi effetti sull’utilizzatore.
  4. 4. Cosa vuol dire sviluppare unvideogioco?Le basi concettualiCi possono essere diverse categorie di videogiochi. In base altipo, cambiano gli approcci allo sviluppo e l’utilizzo deglistrumenti adatti per poterli realizzare. Sicuramente e’necessario avere tutta una serie di conoscenze di base perapprocciare correttamente allo sviluppo di un gioco.
  5. 5. Cosa vuol dire sviluppare un videogioco?Gli ingredienti di un giocoGli elementi che vanno considerati in un gioco sono i seguenti:• Gameplay;• Sceneggiatura;• Storyboard;• Gli sfondi;
  6. 6. Cosa vuol dire sviluppare un videogioco?• Sprites;• Musica;• Effetti sonori;• Social gaming.
  7. 7. Cosa vuol dire sviluppare unvideogioco?GameplayIl gameplay e la meccanica di gioco. E un aspettofondamentale da tenere in considerazione. Linterazione trautilizzatore e gioco deve essere facile, rapida ed intuitiva.Inoltre il livello di difficolta deve essere sempre ben calibrato,per non causare frustrazioni nel giocatore. Un gameplay moltocurato aumenta le probabilita di successo del prodotto, che nondeve mai stancare. Essere vario ma mai complicato.
  8. 8. Cosa vuol dire sviluppare unvideogioco?Linterfaccia che permette allutente di controllare il gioco deveessere semplice. I dispositivi touchscreen beneficeranno, sepossibile, di modalita di input single touch. Per una esperienzadi gioco piu immediata e coinvolgente.
  9. 9. Cosa vuol dire sviluppare unvideogioco?SceneggiaturaSi indica la trama della storia e le modalita con la quale i varipersonaggi interagiscono tra di loro. Allinterno dellasceneggiatura vengono create le personalita dei varipersonaggi. Si individuano ed assegnano I vari ruoli. Questafase e fortemente dipendente dal tipo di gioco. Puo infattianche non essere presente una vera e propria sceneggiatura.Alcune tipologie di giochi non richiedono una sceneggiatura (es.gli scacchi). Gli RPG, al contrario, generalmente presentanotrame particolarmente dettagliate.
  10. 10. Cosa vuol dire sviluppare unvideogioco?StoryboardLo storyboard e la cosiddetta sceneggiatura disegnata. Unavolta stesa una sceneggiatura, e necessario immaginarsi eraffigurare quale aspetto possa e debba presentare sulloschermo. E quindi fondamentale che lo sceneggiatore collaboricon il grafico, al fine di imprimere sulla carta le idee formulate.Lo scopo e quello di arrivare a definire quanto piu nel dettagliopossibile laspetto che dovra avere il prodotto finale.
  11. 11. Cosa vuol dire sviluppare unvideogioco?Questa fase permette di avere unidea dellimpatto emotivo.Anche il comparto audio sara inevitabilmente influenzato.Compito del musicista sara proprio quello di adeguare i temi diaccompagnamento allatmosfera delle varie scene.
  12. 12. Cosa vuol dire sviluppare unvideogioco?Gli sfondiSono elementi grafici che generalmente servono da ambientazione ed a creare l’atmosfera giusta. Gli sfondi possono essere preparati in diversi modi e poi inseriti all’interno del nostro progetto:• e’ possibile creare delle bitmap statiche ed utilizzarle come fondale;• e’ possibile creare dei fondali dinamici, utilizzando un gruppo di tiles (piastrelle) e delle mappe di posizionamento per quest’ultime;
  13. 13. Cosa vuol dire sviluppare unvideogioco?L’utilizzo delle bitmap statiche e’ sempre possibile ma ci sono da considerare tutta una serie di problematiche non trascurabili:• i fondali ottenuti non sarebbero dinamici senza l’utilizzo di procedure particolari e che porterebbero ad un aumento di complessita’ del codice;• occupano piu’ memoria, rendendo quindi inevitabilmente piu’ grandi le applicazioni;• bisogna stare molto attenti al caricamento in memoria perche’ le bitmap potrebbero occupare troppa memoria dinamica, saturando velocemente il buffer e causando situazioni di Out Of Memory dell’applicazione.
  14. 14. Cosa vuol dire sviluppare unvideogioco?L’utilizzo dei tiles e dei file di mappe presenta le seguenti caratteristiche:• i fondali ottenuti possono essere resi piu’ facilmente dinamici, proprio perche’ sono il risultato del posizionamento in base ad un file di mappa. Cambiando la mappa, cambia anche la disposizione degli elementi. Anche in una sola piccola porzione;• occupano meno memoria, mantenendo la dimensione delle applicazioni su livelli accettabili;• proprio in virtu’ del loro ridotto consumo in termini di memoria, risolvono brillantemente il problema legato a possibili Out Of Memory dell’applicazione.
  15. 15. Cosa vuol dire sviluppare unvideogioco?Conclusioni:Dati i vantaggi, il metodo dei tiles e’ sicuramente preferibile.Ciononostante e’ il buon senso che comunque deve saper consigliare.Il sistema dei tiles, rispetto alle bitmap statiche, richiede unalavorazione piu’ lunga e particolare. Nel caso di giochi effettivamentemolto statici (es. poker o scacchi), l’utilizzo di bitmap statichepermetterebbe una realizzazione piu’ rapida dell’applicazione. Dicontro in un gioco molto dinamico, con fondali in movimento (es.platform), data la flessibilita’ e la capacita’ di adattamento del sistemaa tiles, l’effettivo tempo investito nella preparazione delle mappe e’compensato da una maggiore semplicita’ del codice che dovra’ gestirela dinamicita’ dei fondali.
  16. 16. Cosa vuol dire sviluppare unvideogioco?Realizzazione di un fondale mediante l’utilizzo di tilesPer poter realizzare un fondale abbiamo bisogno di due strumenti:• Un programma per disegnare che supporti le trasparenze (es. GIMP – http://www.gimp.org);• Un programma per disegnare i fondali in formato mappa e che sia in grado di salvare in formato TMX (es. Tiled Map Editor – http://www.mapeditor.org). Il file generati da questo programma sono utilizzabili in AndEngine.
  17. 17. Cosa vuol dire sviluppare unvideogioco?Realizziamo un set di tiles con l’aiuto di GIMP. Qui sotto potetevedere il set di tiles utilizzato per la nostra applicazione demoAlien Attack:L’immagine, di 128x128 pixel, e’ un quadrato composto da 4x4tiles quadrate di 32x32 pixel.
  18. 18. Cosa vuol dire sviluppare unvideogioco?Una volta creato il set di tiles, bisogna creare la mappa che nedesignera’ le posizioni. Per fare questo usiamo Tiled Map Editor:
  19. 19. Cosa vuol dire sviluppare unvideogioco?Tiled Map Editor funziona esattamente come un programma didisegno. Solo che al posto della matita il puntatore disegna ifondali in base alla tile che e’ stata scelta. All’inizio si devonodefinire l’altezza e la larghezza espressi in numero di tiles ed iltipo di mappa (isometrica oppure ortogonale). La nostra mappadi esempio e’ ortogonale (visualizzazione laterale piatta).Alla fine dell’operazione di disegno del fondale, bisogna salvarela mappa appena creata dal menu File -> Salva con nome. Lamappa verra’ salvata in formato TMX. Il formato TMX non e’altro che un XML personalizzato con alcuni tag definiti appostaper identificare le proprieta’ della mappa. Il fondale e’ prontoper essere importato nel progetto finale.
  20. 20. Cosa vuol dire sviluppare unvideogioco?Gli spritesSprites:elementi grafici, animati e non, pilotati o meno dal giocatore. Che possono interagire con altri elementi del gioco. Possono essere collocati ovunque e rappresentano gli elementi attivi del gioco.
  21. 21. Cosa vuol dire sviluppare unvideogioco?Realizzazione di uno spritePer poter realizzare uno sprite abbiamo bisogno di due strumenti:• Un programma per disegnare che supporti le trasparenze (es. GIMP – http://www.gimp.org);• Un programma per disegnare sprites (es. Allegro Sprite Editor – http://www.aseprite.org).In teoria potrebbe anche essere sufficiente solo GIMP per tutta la fase di creazione. Ma per la visualizzazione e la simulazione dell’animazione dello sprite, risulta essere piu’ pratico l’Allegro Sprite Editor.
  22. 22. Cosa vuol dire sviluppare unvideogioco?Con l’aiuto di ASEPRITE realizziamo uno sprite animato, di quellipresenti in Alien Attack:
  23. 23. Cosa vuol dire sviluppare unvideogioco?Alla fine del processo ASEPRITE permette di salvare tutti i framecreati in formato PNG. Per avere un risultato facilmenteutilizzabile, conviene unire le PNG create in un unico file,utilizzando GIMP:L’immagine, di 320x32 pixel, e’ un quadrato composto da 10x1tiles quadrate di 32x32 pixel.
  24. 24. Cosa vuol dire sviluppare unvideogioco?MusicaLa musica e’ un aspetto importantissimo dei videogiochi. Deveessere cura del musicista produrre dei temi musicali adeguatialle atmosfere ricercate nel prodotto. Anche se non sempre e’necessario un tema sonoro di sottofondo. La trattazione, data lavastita’ della materia, merita di essere approfondita a parte.
  25. 25. Cosa vuol dire sviluppare unvideogioco?Effetti sonoriAnche gli effetti sonori sono importantissimi perche’aggiungono ancora piu’ spessore ed atmosfera al gioco. Lafigura professionale che produce gli effetti sonori non sempre e’allineata a quella del musicista.
  26. 26. Cosa vuol dire sviluppare unvideogioco? diverse strade per poter ottenereGeneralmente si perseguono gli effetti sonori che necessitano ad un gioco:• Si comprano dei set di effetti sonori campionati da qualcun altro;• Si realizzano i propri campioni sonori, alla stregua di quello che farebbe un rumorista;Si utilizzano programmi audio (es. Audacity – http://audacity.sourceforge.net/) per generare forme d’onda di natura diversa e le si combina, applicando dei filtri, al fine di ottenere un effetto sonoro di sintesi quanto piu’ vicino al risultato desiderato (procedura che e’ stata utilizzata per creare gli effetti di Alien Attack).Al giorno d’oggi, data la disponibilita’ di abbondante materiale sia gratis che a pagamento, generalmente si opta per la prima soluzione.
  27. 27. Cosa vuol dire sviluppare unvideogioco?Social gamingCon la diffusione di connessioni di tipo broadband, cambianoanche I punti di vista relativi al gaming. Attualmente ivideogiochi sono diventati accessori estremamente pervasivigrazie alle possibilita’ offerte dalla rete. Ed il gioco on line e’l’ultima frontiera (per il momento). La possibilita’ di interagirecon persone sconosciute e/o lontane. Sono tutte cose cheattirano sempre di piu’ i videogiocatori.Quindi lo sviluppo di un nuovo concept per un videogioco nonpuo’ non tener conto di questo aspetto che ha delle notevoliricadute anche di natura economica.
  28. 28. Panoramica sugli engine 2Dgratuiti attualmente disponibiliLe piattaforme che e’ possibile reperire in rete sono diverse:• AndEngine - http://www.andengine.org/ ;• Mage Game Engine – http://http://code.google.com/p/mages/ ;• Candroidengine – http://code.google.com/p/candroidengine/;• cocos2d-android – http://code.google.com/p/cocos2d-android/;• libgdx – http://libgdx.badlogicgames.com/ ,
  29. 29. Panoramica sugli engine 2D apagamento attualmentedisponibili• Corona - http://www.anscamobile.com/corona/index.html;• Cuttlefish Engine – http://http://http://www.cuttlefishengine.com/;Noi approfondiremo AndEngine, perche’ gratuito, tra le piu’ complete e con una solida community alle spalle.
  30. 30. Come rendere redditizio ilproprio prodottoDi base si deve considerare che il target Android e moltodiverso da quello di altri mercati, iPhone in primis. L’utenteAndroid medio spende meno per le applicazioni e per i giochi.Questo deve quindi spingerci ad adottare un modello dibusiness sostenibile, per rendere redditizio il nostro lavoro.
  31. 31. Come rendere redditizio ilproprio prodottoQuesti sono I punti che a grandi linee andrebbero osservati:• Rilascio di prodotti di qualita’, con aggiornamenti frequenti;• Adozione di meccanismi di sponsorizzazione internamente all’applicazione (admob);• Nel caso si intendesse invece rilasciare l’applicazione a pagamento, prezzi contenuti;• La possibilita’ di acquisto in-app, di livelli e features aggiuntivi.Il caso Angry Birds per Android dovrebbe far riflettere. Tutti i precedenti punti vengono soddisfatti.
  32. 32. Sviluppo di videogiochi supiattaforma AndroidAndEngine
  33. 33. Obiettivo• Permettere lo sviluppo di giochi con la piattaforma Android
  34. 34. AndEngine: come ottenerlo• Progetto Open Source di Nicolas Gramlich• Home del progetto: http://www.andengine.org/• Sorgenti scaricabili con Mercurial • http://code.google.com/p/andengine/• Plugin eclipse Mercurial: • http://cbes.javaforge.com/update
  35. 35. Concetti Base:GameBaseActivity• Specializzazione della classe Activity che contiene la SurfaceView sulla quale l’Engine andrà a visualizzare i diversi componenti grafici• Gestisce l’interazione con il ciclo di vita di una Activity• Estende la classe BaseActivity aggiungendo la possibilità di eseguire alcune operazioni in modalità asincrona• Implementa l’interfaccia IGameInterface che definisce le operazioni principali nel ciclo di vita di una GameBaseActivity• Utilizza i metodi classici di Android nella comunicazione con gli altri componenti dell’architettura
  36. 36. BaseActivity: task asincroni• Callable<T> • Astrazione del task in grado di creare un altro oggetto di tipo T• Callback<T> • Astrazione dell’oggetto in grado di ricevere l’oggetto T creato da un Callable<T>• AsyncCallable<T> • Astrazione dell’oggetto in grado di eseguire un task per la creazione di un oggetto di tipo T e di notificarne la creazione ad un Callback<T> o Callback<Exception> a seconda dell’esito • Attenzione: L’esecuzione in un Thread separato rispetto a quello della UI è responsabilità del chiamante• ProgressCallable<T> • Astrazione del task in grado di creare un oggetto di tipo T e di notificare ad un IProgressListener lo stato di avanzamento
  37. 37. BaseActivity: task asincroni• DEMO 1
  38. 38. BaseActivity: ciclo di vita• La classe BaseActivity lega il ciclo di vita di una Activity a quello di un gioco• onCreate() • Imposta lo stato di pausa del gioco (mPaused=true) • Inizializza l’Engine invocando il metodo onLoadEngine() • Configura l’Engine attraverso le EngineOptions impostate • Imposta la SurfaceView descritta dalla classe RenderSurfaceView
  39. 39. BaseActivity: ciclo di vita (*) solo la prima volta (mGameLoaded)• onResume() • Carica le risorse invocando il metodo onLoadResource() (*) • Crea la Scene invocando il metodo onLoadScene() (*) • Notifica all’Engine il caricamento della Scene (*) • Notifica il termine della inizializzazione invocando onLoadComplete() (*) • Imposta il gioco come non in pausa (mPaused=false) ed acquisisce il WakeLock • Notifica il resume all’Engine • Notifica il resume alla SurfaceView • Avvia l’Engine invocando il metodo start() • Invoca onGameResumed() come punto di estensione
  40. 40. BaseActivity: ciclo di vita• onPause() • Imposta lo stato di pausa del gioco (mPaused=true) • Rilascia il WakeLock • Notifica lo stato di pause all’Engine attraverso onPause() e successivamento lo ferma invocando il metodo stop() • Notifica lo stato di pause alla SurfaceView • Invoca onGamePaused() come punto di estensione• onDestroy() • Ferma il Thread gestito dall’Engine • Libera le eventuali risorse allocate invocando il metodo onUnloadResources() la cui implementazione di default libera le risorse relative ai suoni
  41. 41. Interfaccia IGameInterface• Aggiunge alla classe BaseActivity i metodi di callback per la gestione del gioco• Operazioni da implementare necessariamente • public Engine onLoadEngine(); // Inizializzazione Engine • public void onLoadResources(); // Caricamento risorse • public Scene onLoadScene(); // Definizione Scena • public void onLoadComplete(); // Avvio Engine• Operazioni già implementate da specializzare all’occorrenza • public void onUnloadResources(); // Liberazione risorse • public void onGamePaused(); // Punto di estensione per pausa gioco • public void onGameResumed(); // Punto di estenzione per ripresa gioco
  42. 42. SurfaceView• In AndEngine sono state realizzate alcune classi che ora sono presenti nell’SDK di Android • AndEngine è compatibile con la versione 1.6 della piattaforma • Alcune classi sono state modificare a causa di bug• SurfaceView • Specializzazione della classe View che rappresenta una superficie di disegno all’interno della gerarchia dei componenti visuali • L’accesso alla SurfaceView avviene attraverso una implementazione di SurfaceView.Holder ottenuta da essa attraverso il metodo getHolder() • Questo meccanismo permette di delegare la gestione del disegno sulla SurfaceView ad un Thread diverso da quello principale
  43. 43. SurfaceView• DEMO 2 (flickering…? next slide!)
  44. 44. SurfaceView flickering• In Android ogni Window viene implementata con una SurfaceView gestita da un SurfaceFlinger • Astrazione del motore 2D di Android• Per ciascuna Surface è gestito il double buffering • Una Surface utilizzata come buffer • Una Surface utilizzata per la visualizzazione• Invocando il metodo unlockCanvasAndPost () la prima viene riversata nella seconda
  45. 45. SurfaceView flickering• La maggior parte delle implementazioni switcha le due Surface • Minimizza il trasferimento di informazioni tra i buffer • Il SurfaceFlinger ha sempre un buffer a disposizione e non deve mettersi in wait in attesa di informazioni disponibili • Il sistema è robusto rispetto alle applicazioni non “di qualità”• Questo dovrebbe impedire il flickering, ma???? • Le chiamate al Canvas influenzano solo il “back” buffer e non quello visibile in quel momento • Si ha un flicker!!!• Soluzione: • È necessario disegnare su entrambi i buffer che si alternano • Oppure disegnare ogni volta tutto lo “stato” della nostra Scene
  46. 46. SurfaceView• DEMO 3 (soluzione al flicker!)
  47. 47. GLSurfaceView• Specializzazione della SurfaceView che utilizza gli strumenti OpenGL attraverso EGL (Embedded-System Graphics Library)• Utilizzata al posto della omonima dell’SDK di Android come workaround di un bug che porta a deadlock nel caso di Activity successive che utilizzano una stessa GLSurfaceView• Delega il rendering ad un oggetto di tipo Render responsabile della generazione dei frame attraverso gli strumenti OpenGL • Esso agisce in un Thread separato rispetto a quello principale di gestione della UI• Supporta diversi tipi di rendering • Rendering on-demand • Continuous Rendering• Fornisce strumenti per ottenere informazioni di debug e tracing
  48. 48. GLSurfaceView• Configurazione EGL • I device Android possono gestire diversi tipi di Surface che si differiscono per il numero di canali e per la quantità di bit per ciascuno di essi • E importante scegliere la configurazione ideale. Di default viene scelta quella configurazione più vicina ad una supefice 16-bit R5G6B5 con un buffer di profondità di 16 bit senza stencil• Renderer • È l’oggetto responsabile del rendering dei frame sulla superficie • Di default la modalità di rendering è quella continua • È possibile impostarla on-demand attraverso il metodo setRenderMode()• Interazione con il ciclo di vita dell’Activity • Ogni GLSurfaceView deve essere notificata dello stato dell’Activity in cui è visualizzata • onPause() quando l’Activity va nello stato di pausa • onResume() quando l’Activity viene riattivata
  49. 49. RenderSurfaceView• Specializzazione della classe GLSurfaceView• Utilizza una particolare implementazione di Renderer che utilizza gli strumenti dell’Engine per la visualizzazione dei frame• Delega l’esecuzione della seguente operazione alla analoga dell’Engine
  50. 50. Engine• Oggetto responsabile della renderizzazione degli elementi del gioco • Simile alla classe SurfaceViewThread dell’esempio precedente• Viene inizializzato attraverso l’utilizzo di un EngineOptions• Interagisce con lo stato della GameActivity attraverso l’invocazione delle operazioni onResume() ed onPause()• Delega la gestione degli update ad un Thread descritto dalla classe UpdateThread • Viene avviato alla creazione dell’Engine • Ha una priorità configurazione attraverso le EngineOptions • Invoca ripetutamente il metodo onTickUpdate() sull’Engine • Può essere interrotto attraverso il metodo interrupt() • Gestire l’intervalli tra tick diversi con la precisione dei nanosecondi (10-9s)
  51. 51. Engine: Operazioni di update(continua)• Calcola i tempi relativi all’intervallo dall’ultimo tick, tempo totale etc• Notifica l’evento all’eventuale oggetto ITouchController per la gestione degli eventi di touch• Notifica il tick agli eventuali Handler • IUpdateHandler : • RunnableHandler :• Gestisce la sincronizzazione degli elementi attraverso il metodo yieldDraw() • Utilizza un oggetto di tipo State (mThreadLocker)come semaforo per la sincronizzazione • Notifica la disponibilità di contenuti da visualizzare notifyCanDraw() • Si mette in wait() per disegnare: waitUntilCanUpdate()
  52. 52. Engine: Operazioni di update(continua)• L’utilizzo del semaforo State serve per la sincronizzazione con il metodo di renderizzazione ovvero il metodo onDrawFrame() • Ci si mette in wait() in attesa di poter renderizzare con il metodo waitUntilCanDraw() • Si aggiorna lo stato delle Texture attraverso il TextureManager • Si aggiorna lo stato dei font attraverso il FontManager • Si gestisce il buffer di oggetti attraverso un BufferObjectManager • Si disegna la scena attraverso il metodo onDrawScene() il quale invoca il metodo onDraw() sulla Scene passando Camera e contesto GL • Si notifica la possibilità di un aggiornamento invocando il metodo notifyCanUpdate() sul semaforo State
  53. 53. Engine: Operazioni di update
  54. 54. Engine: IUpdateHandler• Interfaccia che descrive gli oggetti in grado di essere aggiornati a seguito di un tick dell’UpdateThread • Definisce le operazioni onUpdate() e reset() • Si registrano all’Engine attraverso le operazioni registerUpdateHandler() unregisterUpdateHandler() e clearUpdateHandlers()• Definisce l’interfaccia interna IUpdateHandlerMatcher come specializzazione di IMatcher per oggetti di tipo IUpdateHandler • IMatcher<T> definisce il metodo matches() di confronto tra due oggetti di tipo T• Esistono diverse implementazioni : • IEntity • Gestione collisioni • Emitter
  55. 55. EngineOptions• Contiene le informazioni di inizializzazione di un Engine • Gestione del fullscreen (boolean) • Gestione dell’orientation (enum EngineOptions.ScreenOrientation) • Informazioni relative alla risoluzione: IResolutionPolicy• Contiene il riferimento alla Camera• Opzioni relative alle operazioni di touch • TouchOptions• Opzioni relative alle operazioni di renderizzazione • RenderOptions• Abilitazione di musica ed effetti sonori• Gestisce il livello di priorità dell’UpdateThread
  56. 56. IResolutionPolicy• Interfaccia che permette di impostare il modo con cui la RenderSurfaceView ridimensionata a seconda dei diversi display dei dispositivi• Ne esistono diverse implementazioni • RatioResolutionPolicy: riempie lo schermo mantenendo il rapporto tra le dimensioni • FillResolutionPolicy: riempie tutto lo schermo • FixedResolutionPolicy: dimensioni fisse • RelativeResolutionPolicy:• Sono informazioni usate dall’Engine
  57. 57. Es: FillResolutionPolicy• Il meccanismo utilizzato è quello di gestione del layout delle View • Invocazione del metodo onMeasure() • Invocazione del metodo onLayout()• La SurfaceView di AndEngine notifica al Layout contenitore quelle che sono le sue richieste in termini di dimensione• La FillResolutionPolicy richiede tutto lo spazio a disposizione
  58. 58. SceneLa “Scene”, in AndEngine, identifica appunto la scena che verra realizzata con laggiunta delle varie entity. In fase di inizializzazione viene assegnato un numero che identifica il numero di “layer” (strati) di cui sara composta. Ogni strato puo essere inteso come un livello differente di profondita:Es: scene = new Scene(9); Per comporre una “scene” ed assegnare gli oggetti ai “layer” giusti, si utilizza una chiamata simile a questa: scene.getLayer(LAYER_SCORE).addEntity(this.mScoreText);
  59. 59. EntityLe entity sono gli elementi propriamente detti che concorreranno a comporre la scene. Le entity possono essere composte da grafica e testo (sprites e scritte). Anche gli sfondi sono entity. Esse vengono inserite specificando il livello sul quale andranno visualizzate (getLayer):Es. scene.getLayer(LAYER_BACKGROUND).addEntity(tmxLayer); scene.getLayer(LAYER_SCORE).addEntity(this.mScoreText);
  60. 60. Texture e ITextureSourceLe Texture sono aree di memoria che vengono impiegate per stoccare le immagini provenienti dalle resources appena caricate. Vengono create utilizzando un sistema di coordina te interne. Questo per rendere meno dispersivo e piu efficiente la gestione degli elementi grafici. In verita lutente non avra bisogno delle coordinate per richiamare i pezzi di grafica interessati. Bastera assegnare alle varie aree una TextureRegion.Es. this.mTexture = new Texture(1024, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
  61. 61. TextureRegionLe TextureRegion permettono di identificare univocamente una regione di texture, che potra essere utilizzata per creare, ad esempio, uno sprite:Es. this.mBulletTextureRegion = TextureRegionFactory.createFromAsset(this.mTexture, this, "bullet_sprites.png", 0, 0); mBullet = new Bullet(-(3*CELL_WIDTH), (- (12*CELL_HEIGHT)), 8, 8, this.mBulletTextureRegion);
  62. 62. Cosa vuol dire sviluppare unvideogioco?ConclusioniLo sviluppo di videogiochi e’ un’arte ed una materia a se stante,che richiede il totale impegno da parte di diverse figureprofessionali.Con gli standard qualitativi attuali non e’ possibile per unsingolo individuo svolgere tutte le mansioni a livelli accettabili.Da impegno modesto puo’ nascere solo un prodotto modesto.E’ necessario quindi che il vento cambi nel panorama dellosviluppo italiano. Dobbiamo poter competere a livellointernazionale con realta’ bene consolidate. Bisogna stimolarela formazione di gruppi di sviluppatori indipendenti, capaci diportare a termine autonomamente progetti di piu’ ampiorespiro. Attualmente sono disponibili tecnologie, qualiAndEngine, molto sofisticate ed il cui studio permettesicuramente lottenimento di buoni risultati in tempi brevi.
  63. 63. Sviluppo di videogiochi supiattaforma AndroidA cura diDanilo RisoEmail: danilo.riso@gmail.comMassimo CarliEmail: carli@massimocarli.itSito web: http://www.massimocarli.eu/

×