În această serie de tutori, vom crea o aplicație de simulator de zbor folosind ShiVa3D Suite. Un simulator de zbor este un exemplu interesant de programare 3D. Pentru a construi această aplicație, vom acoperi toate subiectele necesare pentru crearea de jocuri 3D, aplicații educaționale și aplicații 3D noutate. Simulatorul construit în această serie va fi implementat și testat pe un Motorola Droid cu Android 2.2, un iPod Touch cu iOS 4.3 și un iPad 2 cu iOS 4.3.
Cu programul Shiva3D Suite, un programator nu are nevoie să scrie niciun cod specific Android sau iOS. Există doi pași principali în crearea unei aplicații 3D cross-platform cu Shiva3D Suite: (1) Dezvoltarea aspectelor vizuale ale aplicației și a codului corespunzător folosind ShiVa Editor. (2) Conversia fișierului binar rezultat într-un executabil specific platformei (de ex., Un fișier apk pentru Android) sau într-un fișier proiect (de exemplu un proiect Xcode pentru iPad) utilizând ShiVa Authoring Tool.
Editorul ShiVa este un instrument puternic pentru dezvoltarea aplicațiilor 3D. Printre caracteristicile disponibile în instrument, seria se concentrează pe câteva funcții de bază, cum ar fi crearea unui joc, a unei scene, a unui teren, a unui Heads Up Display (componente de interfață utilizator), AIModel (model de comportament pentru un obiect) în limbajul de scripting Lua. După ce am dezvoltat Simulatorul în Editorul ShiVa ca o aplicație 3D, îl vom exporta atât pentru platformele Android OS, cât și pentru platformele iOS. Pentru platforma Android, fișierul exportat din Editorul ShiVa va fi importat în ShiVa Authoring Tool. Apoi, acesta va fi convertit într-un fișier apk pentru implementarea într-un Motorola Droid cu Android 2.2. Pentru platformele iPad și iPhone, fișierul exportat din Editorul ShiVa va fi importat în ShiVa Authoring Tool pentru conversia în proiecte Xcode. Apoi, se pot construi proiectele în Xcode și se pot implementa executabilele rezultate în dispozitive conectate.
În partea a 1 a acestei serii, introducem aplicația Simulator de zbor numită Simulator și explicăm procesul de dezvoltare pe care l-am urmat în timpul creării Simulatorului. De asemenea, am descris conținutul arhivei de descărcare care însoțește această serie. În cele din urmă, am introdus manevrele de zbor de bază simulate în aplicație.
În partea a 2-a, începem să descriem cum să dezvoltăm jocul folosind editorul ShiVa. Principalul nostru accent în partea 2 este crearea componentelor vizuale ale aplicației.
În partea a treia, vom continua să dezvoltăm jocul folosind Editorul ShiVa. În primul rând, partea 3 este implicată în codificarea și testarea unității aplicației.
În partea a 4-a, ultima tranșă a seriei, vom arăta cum să exportați aplicația din editorul ShiVa și să importați în ShiVa Authoring Tool. Apoi, explicăm cum se poate transforma aplicația într-un executabil specific platformei prin Instrumentul de creație ShiVa. Platformele pe care le vom lua în considerare sunt Android, iPad și iPhone. Oferim imaginile de pe ecran ale Simulatorului de la dispozitivele reale utilizate pentru testare, un telefon Motorola Droid cu Android OS 2.2, un iPad 2 cu iOS 4.3 și un iPod Touch cu iOS 4.3. În sfârșit, în "Observații finale", oferim o concluzie seriei.
Simulatorul oferă o vedere a împrejurimilor din cabină, în timp ce pilotul le-ar vedea. Avionul însuși, a cărui dinamică este simulată, nu este niciodată vizibilă. Utilizatorul va vedea un teren de mai jos și cerul deasupra terenului. Există patru manevre simple pentru a simula: manevra de pas pentru a merge în sus sau în jos și manevra de întoarcere la banc pentru a merge la stânga sau la dreapta. Descrierile tehnice ale acestor manevre sunt prezentate în secțiunea următoare. Aici vom examina ecranele în timpul manevrelor și vom discuta despre manevrele efectuate de utilizator.
Pentru a juca Simulatorul, dispozitivul mobil trebuie să fie ținut pe partea sa și rotit la 90 de grade în sens invers acelor de ceasornic. În această poziție, există cinci butoane deasupra ecranului (vedeți mai jos):
Fiecare dintre aceste patru manevre, odată inițiate, durează o anumită perioadă de timp. Odată ce începe o manevră, nu s-ar putea iniția nici o altă manevră până când actualul nu se încheie. În orice moment, avionul continuă să se miște cu viteză constantă. Schimbă altitudinea numai în timpul unei manevre de pas și schimbă direcția numai în timpul unei manevre de întoarcere.
Înainte de începerea oricărei manevre, planul este paralel cu suprafața (teren).
În timpul unei viraje la stânga înclinată, vârful aripii stângi a avionului coboară și vârful aripii sale drepte se ridică. Pentru a simula acest comportament, orizontul va începe să se rotească în sensul acelor de ceasornic. Terrain se va deplasa spre dreapta, pentru că planul se rotește la stânga și va fi afișat un mesaj, "Banking left", după cum urmează:
Odată ce planul atinge un unghi maxim de rulare, orizontul va începe să se rotească în sens invers acelor de ceasornic și să se oprească atunci când planul devine din nou paralel cu suprafața. În timpul întregului ciclu al virajului din stânga, terenul va continua să se deplaseze spre dreapta pentru a simula o întoarcere la stânga a planului.
O rotire din dreapta înclinată este simetrică cu un rând de stânga înclinat deasupra: orizontul va începe să se rotească în sens invers acelor de ceasornic pentru a simula rola avionului, terenul se va deplasa spre stânga și va fi afișat un mesaj "Drept bancar" urmează:
Odată ce planul atinge un unghi minim de rotire, orizontul va începe să se rotească în sensul acelor de ceasornic și să oprească rotirea atunci când planul devine din nou paralel cu suprafața. În timpul întregului ciclu al virajului din dreapta, terenul va continua să se deplaseze spre stânga pentru a simula o mișcare dreaptă a planului.
În timpul unei manevre de pas pentru a merge în sus, orizontul va coborî mai întâi pentru a simula că norul avionului se ridică. În plus, va fi afișat un mesaj, "Pitching up", după cum urmează:
Odată ce planul atinge un unghi de înclinare maxim, nasul planului începe să coboare. Pentru a simula acest comportament, orizontul va începe să urce până când planul va deveni din nou paralel cu suprafața. Pe măsură ce orizontul crește, altitudinea va fi afișată lângă mesajul "Pitching up" așa cum se arată mai jos:
Manevra pitch pentru a merge în jos este simetrică de a merge în sus. Orizontul va începe să meargă să simuleze că nasul avionului coboară și va fi afișat mesajul "Pitching Down", după cum urmează:
Odată ce planul atinge un unghi minim de pas, orizontul va începe să coboare până când planul devine din nou paralel cu suprafața. Pe măsură ce orizontul coboară, altitudinea va fi afișată lângă mesajul "Pitching down", după cum se arată mai jos.
Pe tot parcursul ciclului de manevră a pasului, planul câștigă altitudine, dacă se ridică în sus sau pierde altitudinea, dacă se coboară în jos.
Când utilizatorul repornește simulatorul, se va afișa pe ecran câteva secunde un mesaj, "Repornirea simulării", înainte ca aplicația să repornească. Acest lucru este prezentat mai jos.
În plus față de butoane, utilizatorul poate iniția manevre de întoarcere și pitch cu o singură acțiune pe ecran.
Manevrele de întoarcere prin acțiuni de degetul mare sunt prezentate în figura de mai jos.
Manevrele pitch cu ajutorul acțiunilor degetului mare sunt prezentate în figura de mai jos.
Utilizatorul poate, de asemenea, să repornească simulatorul mutând simultan două degete pe ecran în aceeași direcție, fie în sus, fie în jos, după cum se arată mai jos.
Terenul are dimensiuni finite. Dacă planul iese din limite, este afișat mesajul "Out of boundings", așa cum se arată mai jos, iar simularea repornește.
În această secțiune, vom discuta despre conceptele de bază ale dezvoltării jocurilor 3D cu ShiVa3D. Majoritatea discuțiilor de aici sunt împrumutate din documentația originală ShiVa3D. Pentru mai multe informații, consultați http://www.stonetrip.com/developer/doc/ și manualul de utilizare livrat împreună cu editorul ShiVa.
Joc reprezintă un joc, entitatea principală a aplicației. Încapsulează orice altceva în aplicație, cum ar fi camerele, scenele etc. Jocul este o unitate independentă de implementare.
Scenă reprezintă un loc sau o viziune asociată jocului. Există un set de obiecte sau modele asociate unei scene. Un joc poate avea mai mult de o scenă. Jocul din aplicația Simulator are o singură scenă.
aparat foto reprezintă un punct de vedere în joc. Utilizatorul va vedea jocul prin camera. O cameră poate trece de la o poziție la alta sau poate fi schimbată direcția acesteia. În această serie, camera va captura zborul din punctul de vedere al unui pilot. Vom presupune că camera este plasată în fața planului îndreptat direct în față. Avionul în sine nu va fi vizibil.
Model poate fi un obiect sau un set de obiecte cu diferite atribute, cum ar fi forma, lumina sau senzorul. Singurul model pe care îl vom avea în simulator este o lumină prestabilită pentru a ilumina terenul.
Teren este baza la o scenă. În simulator, vom crea un teren pentru a simula ceea ce un pilot ar vedea în timpul unui zbor.
AIModel implică "inteligență artificială" și reprezintă comportament. Un AIModel poate avea funcții, manipulatoare, stări și variabile. În simulator, vom folosi un AIModel pentru a descrie dinamica simplificată a unui avion.
scenariu conține codul într-un AIModel, de exemplu, codul pentru o funcție sau un manipulator. Limba de scripting în ShiVa3D este Lua (http://www.lua.org).
HUD înseamnă Head Up Display și este un termen care reprezintă diverse widget-uri de interfață cu utilizatorul, cum ar fi butonul, eticheta, lista, cursorul etc., permițând utilizatorului să interacționeze cu jocul. Componentele HUD pe care le vom folosi în simulator sunt etichetele și butoanele de text.
Pentru a dezvolta Simulatorul vom folosi versiunea gratuită a ShiVa3D Suite (http://www.stonetrip.com/download.html), care include ShiVa Editor PLE (ediția de învățare personală) și ShiVa Authoring Tool. Diagrama de mai jos oferă o prezentare generală a procesului de dezvoltare pe care l-am folosit cu aceste instrumente.
Să discutăm pașii individuali ai acestui proces.
Editorul ShiVa are diferite module pentru a dezvolta și testa o aplicație 3D, de obicei un joc, de la bază. O caracteristică importantă a Editorului ShiVa este că o aplicație dezvoltată cu acel instrument poate fi implementată (după ce a fost creată în ShiVa Authoring Tool) pe diferite dispozitive cu sisteme de operare diferite, de ex. un PC care rulează sistemul de operare Windows, un telefon mobil cu sistem de operare Android sau iPhone etc. Unele dintre acțiunile de bază pe care le puteți efectua cu Editorul ShiVa sunt după cum urmează.
Dezvolta:
Test: Puteți efectua un test inițial al aplicației 3D în mediul de dezvoltare înainte de ao implementa într-un dispozitiv destinație. Testarea este efectuată prin caracteristica Animare sau Previzualizare a editorului ShiVa. În timpul testării, puteți schimba setările pentru dimensiunea ecranului pentru a vedea cum va fi afișată aplicația în dispozitivul țintă real. Pentru a testa evenimentele pe butoane, am folosit clicurile de mouse. Pentru a testa evenimentele touch, am exportat și implementat aplicația într-un dispozitiv real.
Export: După terminarea testării, exportați aplicația. Aceasta va genera un fișier cu extensia stk. Aplicația exportată va fi utilizată de instrumentul ShiVa Authoring, care este discutat în continuare.
Scopul principal al instrumentului ShiVa Authoring este de a converti o aplicație creată prin Editorul ShiVa într-o aplicație specifică platformei care poate fi implementată într-un anumit dispozitiv (de exemplu, iPhone, iPad sau telefon Android). Anumite restricții se aplică în ceea ce privește sistemul de operare al mașinii care rulează instrumentul ShiVa Authoring și dispozitivul țintă pentru conversie. De exemplu, instrumentul ShiVa Authoring care rulează pe o mașină Windows nu poate genera o aplicație iPad sau iPhone. În timp ce am dezvoltat Simulatorul, am folosit o mașină Windows pentru Editorul ShiVa. Pentru a crea aplicația Android Simulator, am folosit și o mașină Windows pentru a rula ShiVa Authoring Tool. Pe de altă parte, pentru a crea aplicațiile pentru iOS Simulator, pentru iPhone și iPad, am folosit o mașină Mac OS pentru a rula ShiVa Authoring Tool.
Unele dintre acțiunile de bază pe care le puteți efectua cu instrumentul ShiVa Authoring sunt următoarele.
Selectați platforma de autorizare: În scopul acestei serii, cele trei opțiuni de platformă de care suntem interesați sunt iPhone, iPad și Android. Rețineți că, pentru iPhone și iPad, trebuie să aveți un ShiVa Authoring Tool care rulează într-o mașină Mac OS.
Import: Importați aplicația (un fișier cu extensia stk) care a fost exportată prin Editorul ShiVa.
Build: Când creați pentru Android, vom configura ShiVa Authoring Tool pentru a genera un fișier apk Android care poate fi implementat direct pe un dispozitiv compatibil Android. Când creați pentru iPhone, vom configura ShiVa Authoring Tool pentru a genera un proiect Xcode pentru dezvoltarea iPhone-ului. Apoi, se poate construi proiectul în Xcode și se poate implementa într-un dispozitiv conectat (de fapt am folosit un dispozitiv iPod touch pentru testare în loc de un iPhone). În mod similar, atunci când scriem pentru iPad, vom configura ShiVa Authoring Tool pentru a genera un proiect Xcode pentru dezvoltarea iPad-ului. Apoi, se poate construi proiectul în Xcode și se poate implementa într-un iPad conectat.
Pentru fiecare platformă, ShiVa Authoring Tool oferă opțiuni ușor diferite pentru a genera produsul final. De exemplu, atunci când creați un fișier Android, puteți genera un proiect Eclipse în loc de un executabil Android (așa cum am menționat mai sus, am ales să generăm un executabil Android în această serie).
În mod similar, pentru iPhone sau iPad, s-ar putea genera un executabil pentru distribuție în loc de a genera un proiect Xcode (Așa cum am menționat anterior, am ales să generăm proiecte Xcode în această serie). Pentru mai multe detalii, consultați manualul de utilizare al Instrumentului de creație ShiVa.
Următoarea este o listă a configurațiilor pe care le-am folosit în timp ce dezvoltam aplicația Simulator pentru această serie. Pentru cerințe și cerințe suplimentare, consultați documentația Shiva3D descrisă în http://www.stonetrip.com/developer/doc/editor/information/hardware și http://www.stonetrip.com/developer/doc/authoringtool/installation.
OS de dezvoltare mașină: Windows XP
Rețineți că obiectivul nostru principal în această serie este Android 2.2 pentru care aplicația a fost testată. Cu toate acestea, Shiva 3D Authoring Tool versiunea 1.1 suportă, de asemenea, Android 2.3, nivel API: 9 și Android 2.3.3, nivel API: 10.
În această secțiune, vom oferi o descriere a fișierelor din fișierul de arhivă care însoțește acest articol.
Această secțiune va oferi o imagine de ansamblu a dinamicii zborurilor care va fi simulată în aplicație.
Setarea generală a zborului este un teren pătrat de 4.096 x 4.096 unități lungime pe fiecare parte (pentru o discuție cu privire la termenul "unitate", a se vedea secțiunea numită "Unități și variabile" din partea 4 a acestei serii). Coordonatele tridimensionale se află în centrul terenului. O vedere de sus a terenului este prezentată mai jos. Rețineți că săgeata indică secțiunea pozitivă a unei axe. De asemenea, punctul din interiorul cercului reprezentând axa Y indică faptul că secțiunea pozitivă a axei Y este opusă, adică departe de teren. Din figură, observați că axa Y este axa verticală, în timp ce axele X și Z sunt axele orizontale reprezentând planul bidimensional pe care se află terenul.
Inițial, planul pe care îl simulăm este la (x, y, z) = (0,50,2050) și direcția de deplasare este dreaptă.
Rețineți că simularea nu va afișa planul. În schimb, utilizatorul va fi "așezat" la cabină și va vedea împrejurimile (teren și cer) din cabină, așa cum ar vedea pilotul. Figura de mai jos reprezintă împrejurimile din perspectiva pilotului la începutul simulării (în simulare, sistemul de coordonate nu este afișat utilizatorului). Ridicările de pe teren se schimbă între aproximativ 34 de unități și cel puțin -34 unități.
Simulatorul va efectua patru manevre simple: o manevră de pas pentru a merge în sus sau în jos și o manevră pentru a merge la stânga sau la dreapta.
Să explicăm mai întâi manevra pitch. Așa cum este arătat mai jos, unghiul de înclinare este unghiul de rotație în jurul axei laterale care trece prin planul de la aripa la vârful aripii (http://en.wikipedia.org/wiki/Aircraft_principal_axes).
Figura de mai jos prezintă secvența de manevră a pasului când planul se ridică.
Inițial, planul se deplasează direct paralel cu solul, care este o stare staționară. Când începe pasul, nasul avionului începe să urce. În același timp, avionul începe să câștige altitudine. La un moment dat, unghiul de pantă atinge un maxim. Din acel moment pe nasul avionului începe să coboare, totuși, avionul continuă să câștige altitudine. Nasul planului continuă să coboare până când unghiul de pas ajunge la 0, adică planul ajunge din nou la starea de echilibru. Din acel moment, avionul își va menține altitudinea. Ca urmare a acestei manevre, planul a câștigat altitudinea între cele două condiții staționare, după cum se arată mai jos.
Manevra pitch atunci când planul coboară este simetric cu cele de mai sus. Inițial, avionul călătorește drept înainte. La pornirea pitch, nasul planului începe să coboare și planul începe să piardă altitudinea. La un moment dat, unghiul de pantă atinge un nivel minim. Din acel punct de pe nasul avionului începe să urce, totuși, avionul continuă să piardă altitudinea. Nasul planului continuă până când unghiul de pas ajunge la 0, adică planul ajunge din nou la starea de echilibru. Din acel moment, avionul își va menține altitudinea. Ca urmare a acestei manevre, planul a pierdut altitudinea între cele două condiții staționare.
Să descriem acum rândul rândului. Așa cum este arătat mai jos, unghiul de rotire în jurul axei longitudinale, care trece prin planul dinspre nas spre coadă, este unghiul de rotire (echivalent cu banc). (Http://en.wikipedia.org/wiki/Aircraft_principal_axes)
Figura de mai jos prezintă secvența unei manevre de întoarcere la stânga.
Inițial, avionul se deplasează înainte, ceea ce reprezintă o stare staționară. Când începe manevra, unghiul de deschidere începe să crească și planul începe să se rotească la stânga. La un moment dat, unghiul canalului atinge un maxim. Din acest punct de pe unghiul de colț începe să scadă, însă planul continuă să se deplaseze la stânga. Unghiul de blocare continuă să scadă până ajunge la 0, adică ajunge din nou la starea de echilibru. Din acel moment, avionul va continua să meargă drept înainte. Ca urmare a acestei manevre, planul a schimbat direcția spre stânga între cele două condiții staționare, după cum se arată mai jos.
Turnul spre dreapta este simetric față de cele de mai sus. Inițial, avionul se deplasează înainte, ceea ce reprezintă o stare staționară. Când manevra începe, unghiul de deschidere începe să scadă, iar planul începe să se rotească la dreapta. La un moment dat, unghiul de bătaie atinge un minim. Din acest punct de pe unghiul de colț începe să crească, cu toate acestea, avionul continuă să se întoarcă la dreapta. Unghiul băncii continuă să crească până când ajunge la 0, adică ajunge din nou la starea de echilibru. Din acel moment, avionul va continua să meargă drept înainte. Ca urmare a acestei manevre, planul a schimbat direcția spre dreapta între cele două condiții staționare.
În realitate, avioanele puteau executa manevre mai sofisticate, cum ar fi bancar și pitching, în același timp. Pentru simplitate, avionul nostru va efectua doar unul dintre aceștia la un moment dat. Adăugarea manevrelor avansate la simulator nu este o sarcină dificilă și este lăsată cititorului interesat ca un exercițiu.
Pentru a simula mișcarea planului în coordonate tridimensionale, folosim un model simplificat așa cum este descris mai jos.
În timpul manevrării pasului, în timp ce planul urcă (în jos, respectiv), codul aplicației va crește (decrementarea) valoarea coordonatei Y cu o sumă fixă la fiecare cadru al simulării, independent de unghiul de pantă. Coordonata Y a planului este fixată în orice moment, cu excepția unei manevre de pas.
În timpul manevrei de întoarcere înclinată, pe măsură ce un avion se întoarce spre stânga (dreapta, respectiv), codul aplicației va crește (respectiv reduce) rotația planului în jurul axei Y cu o sumă fixă la fiecare cadru al simulării.
Apoi, coordonatele X și Z ale planului sunt calculate la fiecare cadru folosind două variabile, V, viteza planului și Yg, rotația planului în jurul axei Y, prezentată mai jos:
Este ușor de observat din figura de mai sus că viteza planului de-a lungul axelor X și Z este -V * sin (Yg) și -V * cos (Yg), respectiv. La fiecare cadru al simulării, codul aplicației obține Yg printr-un apel API și calculează aceste viteze. Apoi, obține coordonatele X și Z actuale ale planului și stabilește noile coordonate X și Z pe baza vitezelor calculate. Amplitudinea vitezei este constantă în timpul simulării.
În partea a 1 a acestei serii, am introdus aplicația Simulator de zbor numită Simulator și am explicat procesul de dezvoltare pe care l-am urmat în timpul creării Simulatorului. De asemenea, am descris conținutul arhivei de descărcare care însoțește acest articol. În cele din urmă, am introdus manevrele de zbor de bază simulate în aplicație. În partea a 2-a, vom începe să descriem cum să dezvoltăm jocul folosind editorul ShiVa.