In questa serie di tutorial, creeremo un'applicazione di simulazione di volo utilizzando ShiVa3D Suite. Un simulatore di volo è un interessante esempio di programmazione 3D. Per costruire questa applicazione, tratteremo tutti gli argomenti necessari per creare giochi 3D, applicazioni educative e applicazioni 3D innovative. Il simulatore integrato in questa serie verrà distribuito e testato su un Motorola Droid con Android 2.2, un iPod Touch con iOS 4.3 e un iPad 2 con iOS 4.3.
Con Shiva3D Suite, un programmatore non ha bisogno di scrivere alcun codice specifico per Android o iOS. Ci sono due passaggi principali nella creazione di un'applicazione 3D multipiattaforma con Shiva3D Suite: (1) Sviluppa gli aspetti visivi dell'applicazione e il codice corrispondente utilizzando ShiVa Editor. (2) Convertire il file binario risultante in un eseguibile specifico della piattaforma (ad es. Un file apk per Android) o un file di progetto (ad esempio un progetto Xcode per iPad) usando lo strumento di authoring ShiVa.
ShiVa Editor è un potente strumento per sviluppare applicazioni 3D. Tra le funzioni disponibili nello strumento, questa serie si concentra su alcune funzioni di base, come la creazione di un gioco, una scena, un terreno, un display Heads Up (componenti dell'interfaccia utente), AIModel (modello comportamentale per un oggetto), nonché la codifica nel linguaggio di scripting Lua. Dopo aver sviluppato il simulatore nell'editor ShiVa come applicazione 3D, lo esporteremo sia per il sistema operativo Android che per le piattaforme iOS. Per la piattaforma Android, il file esportato da ShiVa Editor verrà importato nello strumento di authoring di ShiVa. Quindi, verrà convertito in un file apk per la distribuzione in un Motorola Droid con Android 2.2. Per piattaforme iPad e iPhone, il file esportato da ShiVa Editor verrà importato nello strumento di creazione ShiVa per la conversione in progetti Xcode. Quindi, è possibile creare i progetti in Xcode e distribuire i file eseguibili risultanti in dispositivi connessi.
Nella parte 1 di questa serie, presentiamo l'applicazione Simulator di volo denominata Simulator e illustriamo il processo di sviluppo che abbiamo seguito durante la creazione del simulatore. Abbiamo anche descritto il contenuto dell'archivio di download che accompagna questa serie. Infine, abbiamo introdotto le manovre di volo di base simulate nell'applicazione.
Nella parte 2, iniziamo a descrivere come sviluppare il gioco usando l'Editor ShiVa. Il nostro obiettivo principale nella parte 2 è la creazione dei componenti visivi dell'applicazione.
Nella parte 3, continuiamo a sviluppare il gioco usando l'Editor ShiVa. In primo luogo, la parte 3 è coinvolta con la codifica e l'unità di test dell'applicazione.
Nella parte 4, l'ultima puntata della serie, mostriamo come esportare l'applicazione da ShiVa Editor e importarla nello strumento di authoring di ShiVa. Quindi, spieghiamo come convertire l'applicazione in un eseguibile specifico della piattaforma tramite lo strumento di authoring ShiVa. Le piattaforme che considereremo sono Android, iPad e iPhone. Forniamo immagini dello schermo del simulatore da dispositivi reali utilizzati per il test, un telefono Motorola Droid con Android OS 2.2, un iPad 2 con iOS 4.3 e un iPod Touch con iOS 4.3. Infine, in "Considerazioni conclusive", forniamo una conclusione alla serie.
Il simulatore fornisce una vista dei dintorni dall'abitacolo come un pilota li vedrebbe. Il piano stesso, le cui dinamiche sono simulate, non è mai visibile. L'utente vedrà un terreno sottostante e il cielo sopra il terreno. Ci sono quattro semplici manovre da simulare: la manovra del pitch per salire o scendere e la manovra di virata per andare a sinistra oa destra. Le descrizioni tecniche di queste manovre sono fornite nella prossima sezione. Qui, esamineremo le schermate durante le manovre e discuteremo come le manovre vengono eseguite dall'utente.
Per giocare al simulatore, il dispositivo mobile deve essere tenuto su un lato e ruotato di 90 gradi in senso antiorario. In quella posizione, ci sono cinque pulsanti in cima allo schermo (vedi sotto):
Ciascuna di queste quattro manovre, una volta iniziata, richiede un certo tempo per completarla. Una volta iniziata una manovra, non è possibile iniziare altre manovre fino a quando quella attuale non è completa. In ogni momento, l'aereo continua a muoversi a velocità costante. Cambia altitudine solo durante una manovra di beccheggio e cambia direzione solo durante una manovra di virata.
Prima che inizi una manovra, l'aereo è parallelo alla superficie (terreno).
Durante una virata a sinistra, la punta dell'ala sinistra dell'aereo scende e la punta dell'ala destra sale. Per simulare questo comportamento, l'orizzonte inizierà a ruotare in senso orario. Il terreno si sposterà a destra, poiché l'aereo gira a sinistra e verrà visualizzato un messaggio, 'Banking left', come segue:
Quando l'aereo raggiunge un angolo massimo di rotazione (banco), l'orizzonte inizierà a ruotare in senso antiorario e smetterà di ruotare quando il piano ritorna parallelo alla superficie. Durante l'intero ciclo della svolta a sinistra, il terreno continuerà a spostarsi verso destra per simulare una svolta a sinistra dell'aereo.
Una virata a destra in virata è simmetrica rispetto alla virata a sinistra sopra: l'orizzonte inizierà a ruotare in senso antiorario per simulare il rollio del piano, il terreno si sposterà a sinistra e verrà visualizzato un messaggio, 'Banking right', come segue:
Quando l'aereo raggiunge un angolo di rollio minimo, l'orizzonte inizierà a ruotare in senso orario e smetterà di ruotare quando il piano ritorna parallelo alla superficie. Durante l'intero ciclo della svolta a destra, il terreno continuerà a spostarsi verso sinistra per simulare una svolta a destra dell'aereo.
Durante una manovra di beccheggio per salire, l'orizzonte prima scenderà per simulare che il naso dell'aereo sale. Inoltre, verrà visualizzato un messaggio, "Pitching up", come segue:
Quando l'aereo raggiunge un angolo di beccheggio massimo, il muso dell'aereo inizia a scendere. Per simulare questo comportamento, l'orizzonte inizierà a salire finché il piano non ritorna parallelo alla superficie. All'aumentare dell'orizzonte, l'altitudine verrà visualizzata accanto al messaggio 'Pitching up' come mostrato di seguito:
La manovra del pitch per scendere è simmetrica all'aumentare. L'orizzonte inizierà a salire per simulare che il naso dell'aereo si abbassa e verrà visualizzato un messaggio, "Pitching down", come segue:
Quando l'aereo raggiunge un angolo minimo di inclinazione, l'orizzonte inizierà a scendere finché il piano non ritorna parallelo alla superficie. Quando l'orizzonte si abbassa, l'altitudine verrà visualizzata accanto al messaggio 'Pitching down' come mostrato di seguito.
Durante l'intero ciclo di una manovra di pitch, l'aereo guadagna quota, se sale di tono o perde quota, se scende.
Quando l'utente riavvia il simulatore, un messaggio, "Riavvio della simulazione", verrà visualizzato sullo schermo per alcuni secondi prima che l'applicazione si riavvii. Questo è mostrato sotto.
Oltre ai pulsanti, l'utente può avviare virate e manovre di pitch con una sola azione sullo schermo.
Le manovre di virata tramite le azioni del pollice sono mostrate nella figura sotto.
Le manovre del passo tramite le azioni del pollice sono mostrate nella figura seguente.
L'utente può anche riavviare il simulatore spostando contemporaneamente due dita sullo schermo nella stessa direzione, verso l'alto o verso il basso, come indicato di seguito.
Il terreno ha dimensioni finite. Se l'aereo esce dai limiti viene visualizzato un messaggio 'Fuori limite', come mostrato di seguito, e la simulazione ricomincia.
In questa sezione, discuteremo i concetti di base dello sviluppo di giochi 3D con ShiVa3D. La maggior parte della discussione qui è presa in prestito dalla documentazione originale di ShiVa3D. Per ulteriori informazioni, consultare http://www.stonetrip.com/developer/doc/ e il manuale dell'utente fornito con l'editor ShiVa.
Gioco rappresenta un gioco, l'entità principale dell'applicazione. Incapsula tutto il resto dell'applicazione come telecamere, scene, ecc. Il gioco è un'unità di schieramento indipendente.
Scena rappresenta un luogo o una vista associati al gioco. C'è una serie di oggetti o modelli associati a una scena. Un gioco può avere più di una scena. Il gioco nell'applicazione Simulatore ha una singola scena.
telecamera rappresenta un punto di vista nel gioco. L'utente vedrà il gioco attraverso la fotocamera. Una telecamera può spostarsi da una posizione all'altra o la sua direzione può essere cambiata. In questa serie, la telecamera catturerà il volo dalla vista di un pilota. Assumeremo che la fotocamera sia posizionata davanti all'aereo puntata direttamente davanti. L'aereo stesso non sarà visibile.
Modello può essere un oggetto o un insieme di oggetti con vari attributi come forma, luce o sensore. L'unico modello che avremo nel simulatore è una luce predefinita impostata per illuminare il terreno.
Terreno è il terreno in una scena. Nel simulatore, creeremo un terreno per simulare quello che un pilota vedrebbe durante un volo.
AIModel implica 'intelligenza artificiale' e rappresenta il comportamento. Un AIModel può avere funzioni, gestori, stati e variabili. Nel simulatore, useremo un AIModel per descrivere la dinamica semplificata di un piano.
copione contiene il codice in un AIModel, ad esempio il codice per una funzione o un gestore. Il linguaggio di scripting in ShiVa3D è Lua (http://www.lua.org).
HUD è l'acronimo di Head Up Display ed è un termine che rappresenta vari widget dell'interfaccia utente come il pulsante, l'etichetta, l'elenco, il cursore, ecc. che consente all'utente di interagire con il gioco. I componenti HUD che useremo nel simulatore sono le etichette e i pulsanti di testo.
Per sviluppare il simulatore utilizzeremo la versione gratuita di ShiVa3D Suite (http://www.stonetrip.com/download.html), che include ShiVa Editor PLE (edizione di apprendimento personale) e ShiVa Authoring Tool. Lo schema seguente offre una panoramica del processo di sviluppo che abbiamo utilizzato con questi strumenti.
Cerchiamo di discutere i singoli passaggi di quel processo.
L'editor ShiVa ha vari moduli per sviluppare e testare un'applicazione 3D, tipicamente un gioco, da zero. Una caratteristica importante di ShiVa Editor è che un'applicazione sviluppata con tale strumento può essere implementata (dopo l'authoring in ShiVa Authoring Tool) in diversi dispositivi con diversi sistemi operativi, ad es. un PC con sistema operativo Windows, un telefono cellulare con sistema operativo Android o iPhone ecc. Alcune delle azioni di base che è possibile eseguire con l'Editor ShiVa sono le seguenti.
Sviluppare:
Test: è possibile eseguire un test iniziale dell'applicazione 3D nell'ambiente di sviluppo prima di distribuirlo in un dispositivo di destinazione. Il test viene eseguito tramite la funzione Anima o Anteprima di ShiVa Editor. Durante il test, è possibile modificare le impostazioni per le dimensioni dello schermo per vedere come verrà visualizzata l'applicazione nell'attuale dispositivo di destinazione. Per testare gli eventi dei pulsanti, abbiamo utilizzato i clic del mouse. Per testare gli eventi touch, abbiamo esportato e distribuito l'applicazione in un dispositivo reale.
Esportazione: al termine del test, esportare l'applicazione. Questo genererà un file con estensione stk. L'applicazione esportata verrà utilizzata dallo strumento di authoring ShiVa, che verrà discusso di seguito.
Lo scopo principale dello strumento Authoring di ShiVa è convertire un'applicazione, creata tramite l'Editor ShiVa, in un'applicazione specifica della piattaforma che può essere distribuita in un particolare dispositivo (ad esempio iPhone, iPad o telefono Android). Alcune restrizioni si applicano al sistema operativo della macchina che esegue lo strumento Authoring di ShiVa e al dispositivo di destinazione per la conversione. Ad esempio, lo strumento di authoring ShiVa in esecuzione su una macchina Windows non può generare un'applicazione per iPad o iPhone. Durante lo sviluppo del simulatore, abbiamo utilizzato una macchina Windows per l'editor ShiVa. Per creare l'applicazione Android Simulator, abbiamo anche utilizzato una macchina Windows per eseguire lo strumento di creazione di ShiVa. D'altra parte, per creare le applicazioni iOS Simulator, per iPhone e iPad, abbiamo utilizzato una macchina Mac OS per eseguire lo strumento di authoring ShiVa.
Alcune delle azioni di base che si possono eseguire con lo strumento di authoring ShiVa sono le seguenti.
Seleziona piattaforma di authoring: per gli scopi di questa serie, le tre opzioni di piattaforma che ci interessano sono iPhone, iPad e Android. Nota che, per iPhone e iPad, devi avere lo Strumento di authoring ShiVa in esecuzione su un computer Mac OS.
Importa: importa l'applicazione (un file con estensione stk) che è stata esportata tramite l'editor ShiVa.
Build: quando crei per Android, configureremo lo Strumento di authoring ShiVa per generare un file apk Android che possa essere distribuito direttamente su un dispositivo Android compatibile. Quando crei per iPhone, configureremo lo Strumento di authoring ShiVa per generare un progetto Xcode per lo sviluppo di iPhone. Quindi, è possibile creare il progetto in Xcode e distribuirlo in un dispositivo connesso (in realtà abbiamo utilizzato un dispositivo iPod touch per i test anziché un iPhone). Allo stesso modo, quando crei iPad, configureremo lo Strumento di authoring di ShiVa per generare un progetto Xcode per lo sviluppo di iPad. Quindi, è possibile creare il progetto in Xcode e distribuirlo in un iPad collegato.
Per ciascuna piattaforma, lo strumento di authoring di ShiVa offre opzioni leggermente diverse per generare il suo prodotto finale. Ad esempio, quando si crea per Android, è possibile generare un progetto Eclipse anziché un eseguibile Android (come menzionato sopra, abbiamo scelto di generare un eseguibile Android in questa serie).
Allo stesso modo, per iPhone o iPad, si potrebbe generare un eseguibile per la distribuzione invece di generare un progetto Xcode (come menzionato in precedenza, abbiamo scelto di generare progetti Xcode in questa serie). Per ulteriori dettagli, consultare il manuale utente dello strumento di creazione ShiVa.
Di seguito è riportato un elenco di configurazioni che abbiamo utilizzato durante lo sviluppo dell'app Simulator per questa serie. Per ulteriori requisiti e prerequisiti, consultare la documentazione di Shiva3D descritta in http://www.stonetrip.com/developer/doc/editor/information/hardware e http://www.stonetrip.com/developer/doc/authoringtool/installation.
Sistema operativo della macchina di sviluppo: Windows XP
Nota che il nostro obiettivo principale in questa serie è Android 2.2 per il quale è stata testata l'applicazione. Tuttavia, Shiva 3D Authoring Tool versione 1.1 supporta anche Android 2.3, livello API: 9 e Android 2.3.3, livello API: 10.
In questa sezione, daremo una descrizione dei file nel file di archivio che accompagna questo articolo.
Questa sezione fornirà una panoramica delle dinamiche di volo che verranno simulate nell'applicazione.
L'impostazione generale per il volo è un terreno quadrato di 4.096 x 4.096 unità su ciascun lato (per una discussione sul termine 'unità' vedi la sezione 'Unità e variabili' nella parte 4 di questa serie). Le coordinate tridimensionali si trovano al centro del terreno. Di seguito viene mostrata una vista dall'alto del terreno. Si noti che la freccia indica la sezione positiva di un asse. Inoltre, il punto all'interno del cerchio che rappresenta l'asse Y indica che la sezione positiva dell'asse Y è opposta a, cioè lontano dal terreno. Dalla figura, osserva che l'asse Y è l'asse verticale mentre gli assi X e Z sono gli assi orizzontali che rappresentano il piano bidimensionale su cui giace il terreno.
Inizialmente, l'aereo che simuliamo è a (x, y, z) = (0,50,2050) e la sua direzione di marcia è dritta.
Si noti che la simulazione non visualizzerà il piano. Invece, l'utente sarà "seduto" nella cabina di pilotaggio e vedrà i dintorni (terreno e cielo) dalla cabina di pilotaggio come vedrebbe un pilota. La figura seguente rappresenta l'ambiente dal punto di vista del pilota all'inizio della simulazione (nella simulazione, il sistema di coordinate non viene visualizzato all'utente). Le quote sul terreno cambiano tra, approssimativamente, un massimo di 34 unità e un minimo di -34 unità.
Il simulatore eseguirà quattro semplici manovre: una manovra di beccheggio per salire o scendere e una manovra di virata sopraelevata per andare a sinistra oa destra.
Per prima cosa spieghiamo la manovra del passo. Come mostrato di seguito, l'angolo di inclinazione è l'angolo di rotazione attorno all'asse laterale che passa attraverso il piano dalla punta dell'ala alla punta dell'ala (http://en.wikipedia.org/wiki/Aircraft_principal_axes).
La figura seguente mostra la sequenza di manovre del pitch quando l'aereo sale.
Inizialmente, l'aereo procede dritto parallelo al suolo, condizione di stato stazionario. Quando inizia l'intonazione, il muso dell'aereo inizia a salire. Allo stesso tempo, l'aereo inizia a guadagnare quota. Ad un certo punto l'angolo di beccheggio raggiunge il massimo. Da quel punto sul muso dell'aereo inizia a scendere, tuttavia, l'aereo continua a guadagnare quota. La punta dell'aereo continua a scendere finché l'angolo di inclinazione non raggiunge 0, cioè il piano raggiunge nuovamente lo stato stazionario. Da quel momento in poi, l'aereo manterrà la sua altitudine. Come risultato di questa manovra, l'aereo ha guadagnato l'altitudine tra le due condizioni di stato stazionario come mostrato di seguito.
La manovra del pitch quando l'aereo scende è simmetrica rispetto a quanto sopra. Inizialmente, l'aereo sta viaggiando dritto. Quando inizia il pitch, il muso dell'aereo inizia a scendere e l'aereo inizia a perdere quota. Ad un certo punto l'angolo di inclinazione raggiunge il minimo. Da quel punto sul muso dell'aereo inizia a salire, tuttavia, l'aereo continua a perdere quota. La punta dell'aereo continua a salire fino a quando l'angolo di inclinazione raggiunge 0, cioè il piano raggiunge nuovamente lo stato stazionario. Da quel momento in poi, l'aereo manterrà la sua altitudine. Come risultato di questa manovra, l'aereo ha perso l'altitudine tra le due condizioni stazionarie.
Descriviamo ora la svolta in virata. Come mostrato sotto, l'angolo del rotolo (equivalente alla sponda) è l'angolo di rotazione attorno all'asse longitudinale che passa attraverso il piano dal naso alla coda. (Http://en.wikipedia.org/wiki/Aircraft_principal_axes)
La figura seguente mostra la sequenza di una manovra a virata a sinistra.
Inizialmente, l'aereo procede dritto, condizione di stato stazionario. Quando inizia la manovra, l'angolo del banco inizia ad aumentare e l'aereo inizia a girare a sinistra. Ad un certo punto l'angolo del bank raggiunge il massimo. Da quel punto l'angolo del bank inizia a decrescere, tuttavia, l'aereo continua a girare a sinistra. L'angolo del banco continua a diminuire fino a raggiungere 0, cioè raggiunge nuovamente lo stato stazionario. Da quel momento in poi, l'aereo proseguirà dritto. Come risultato di questa manovra, l'aereo ha cambiato direzione a sinistra tra le due condizioni di stato stazionario come mostrato di seguito.
La virata a destra è simmetrica rispetto a quanto sopra. Inizialmente, l'aereo procede dritto, condizione di stato stazionario. Quando inizia la manovra, l'angolo del bank inizia a decrescere e l'aereo inizia a girare a destra. Ad un certo punto l'angolo della banca raggiunge il minimo. Da quel punto l'angolo della banca inizia ad aumentare, tuttavia, l'aereo continua a girare a destra. L'angolo del banco continua ad aumentare fino a raggiungere 0, cioè a raggiungere di nuovo lo stato stazionario. Da quel momento in poi, l'aereo proseguirà dritto. Come risultato di questa manovra, l'aereo ha cambiato direzione a destra tra le due condizioni di stato stazionario.
In realtà, gli aerei potrebbero eseguire allo stesso tempo manovre più sofisticate come operazioni bancarie e pitching. Per semplicità, il nostro aereo eseguirà solo uno di quelli in un dato momento. Aggiungere manovre avanzate al simulatore non è un compito difficile ed è lasciato al lettore interessato come un esercizio.
Per simulare il movimento del piano in coordinate tridimensionali, utilizziamo un modello semplificato come descritto di seguito.
Durante la manovra del pitch, mentre l'aereo sale (verso il basso, rispettivamente) il codice dell'applicazione incrementerà (decrementa, rispettivamente) il valore della coordinata Y di una quantità fissa in ciascun fotogramma della simulazione indipendentemente dall'angolo di inclinazione. La coordinata Y del piano è fissa in ogni momento, tranne durante una manovra di beccheggio.
Durante la manovra di virata sopraelevata, mentre un aereo gira a sinistra (a destra, rispettivamente) il codice dell'applicazione aumenterà (diminuirà, rispettivamente) la rotazione del piano attorno all'asse Y di una quantità fissa in ciascun fotogramma della simulazione.
Quindi, le coordinate X e Z del piano vengono calcolate su ciascun fotogramma utilizzando due variabili: V, velocità del piano e Yg, rotazione del piano attorno all'asse Y, come mostrato di seguito:
È facile vedere dalla figura sopra che la velocità del piano lungo gli assi X e Z è rispettivamente di -V * sin (Yg) e -V * cos (Yg). Ad ogni frame della simulazione, il codice dell'applicazione ottiene Yg tramite una chiamata API e calcola tali velocità. Quindi, ottiene le coordinate X e Z correnti del piano e imposta le nuove coordinate X e Z in base alle velocità calcolate. La grandezza della velocità è costante durante la simulazione.
Nella parte 1 di questa serie, abbiamo introdotto l'applicazione simulatore di volo denominata Simulator e spiegato il processo di sviluppo che abbiamo seguito durante la creazione del simulatore. Abbiamo anche descritto il contenuto dell'archivio di download che accompagna questo articolo. Infine, abbiamo introdotto le manovre di volo di base simulate nell'applicazione. Nella parte 2, inizieremo a descrivere come sviluppare il gioco usando l'Editor ShiVa.