Dezvoltare 3D a jocului cu ShiVa3D Suite AI & Animație

Curios despre dezvoltarea jocurilor 3D? Acum este momentul să înveți! Această serie de tutori din cinci părți va demonstra cum să construiți un joc simplu cu ShiVa3D Suite, un motor de joc 3D și un instrument de creație. Aceasta este cea de-a patra tranșă a seriei, unde veți finaliza programarea modelului AI pentru joc și veți învăța cum să creați teste unitare pentru a vă verifica munca.


Dezvoltarea jocului în Editorul ShiVa - Continuare

În partea a 3-a, am învățat cum să editați scena aplicației noastre. De asemenea, am început să introducem codul pentru AIModelele jocului și am terminat codificarea pentru DuckAI. În partea a 4-a, vom termina codificarea pentru restul AIModelurilor, EggAI și MainAI și vom efectua testarea unităților prin animarea jocului. Apoi vom exporta jocul din ShiVa Editor pentru a fi importat în Shiva Authoring Tool. În cele din urmă, vom discuta două opțiuni de creație diferite în instrumentul Shiva Authoring Tool: unul pentru generarea unui executabil Android și altul pentru generarea unui proiect Eclipse.


Introduceți variabile și cod pentru EggAI

În editorul AIModel, selectați fila EggAI. (Dacă nu vedeți fila EggAI, aduceți Editorul AIModel și Data Explorer alături, apoi mergeți la Data Explorer -> Resurse -> AIModele și faceți dublu-clic pe EggAI.Aceasta ar trebui să afișeze EggAI într-o filă în AIModel Editor.)
Adăugați două variabile la EggAI:

  • nume: isBack, tip: boolean, Init Value: true
  • nume: salt, tip: number, Init Value: 0

Adăugați handler-ele onInit și onEnterFrame așa cum am făcut-o anterior. De asemenea, adăugați un handler personalizat selectând Add Handler -> Custom, după cum se arată mai jos.

Figura 53. Handler personalizat

Denumiți manipularea personalizată "onCaptureInput". Notă: este important să nu introduceți "on", deoarece este adăugat prin dialog, după cum se arată mai jos.

Figura 54. Denumirea Handler personalizat

Ar trebui să vedeți următoarele.

Figura 55. EggAI Handlers

Acum aduceți editorul AIModel și editorul de scripturi alăturate, așa cum am făcut înainte. În editorul AIModel, selectați fila EggAI. Dând dublu clic pe onInit, onEnterFrame și onCaptureInput unul câte unul, aduceți codul corespunzător în Editorul Script și înlocuiți-le cu următoarele. În fiecare caz, nu uitați să salvați scripturile din Editorul Script prin intermediul Control + S.

Pentru onInit:

 funcția EggAI.onInit () -------------------------------------------- ------------------------------------ object.setTranslation (this.getObject (), 0, 3, 0, object.kGlobalSpace) -------------------------------------------- ------------------------------------ Sfârșit --------------------------------------------------------------------------------

Pentru onEnterFrame:

 funcția EggAI.onEnterFrame () -------------------------------------------- ------------------------------------ locală lObject = this.getObject () locală x, y, z = object.getRotarea (lObject, object.kLocalSpace) object.setRotation (lObject, x + 1, y, z, object.kLocalSpace) local xp, yp, zp = object.getTranslation (this.getObject (), object.kGlobalSpace) în cazul în care (zp < -5) then this.isBack (false ) elseif(zp > 5), atunci acest.isBack (adevărat) se termină dacă (this.isBack ()), apoi object.setTranslation (this.getObject (), 0, 3, zp-0.005-math.abs (this.jump ()) obiect. kGlobalSpace) altceva object.setTranslation (this.getObject (), 0, 3, zp + 0.005 + math.abs (this.jump ()), object.kGlobalSpace) end this.jump (0) ------- -------------------------------------------------- ----------------------- Sfârșit --------------------------------------------------------------------------------

Pentru onCaptureInput:

 funcția EggAI.onCaptureInput (d) ------------------------------------------- ------------------------------------- dacă (d == 1) atunci this.jump (0.1 ) this.isBack (false) elseif (d == - 1) apoi this.jump (-0.1) this.isBack (true) end -------------------- -------------------------------------------------- ---------- Sfârșit --------------------------------------------------------------------------------

Am terminat cu variabilele și codul pentru EggAI.


Introduceți variabile și cod pentru MainAI

Acum, vom lucra la MainAI. Aceasta este ultima bucată de cod înainte de a compila totul și de a rula un test local. În fila MainAI a Editorului AIModel, adăugați cele trei variabile prezentate mai jos.

  • nume: ouă, tip: obiect, valoare inițială: zero
  • nume: prevTouchCount, tip: număr, valoare inițială: 0
  • nume: prevY0, tip: number, init value: 0

Dacă faceți clic pe Adăugare funcție, adăugați trei funcții: displayRestart, requestRestart și resetare.

În cele din urmă, adăugați patru manageri: onInit, onTouchSequenceBegin, onTouchSequenceChange și onTouchSequenceEnd. Rețineți că pentru a adăuga ultimele trei agende, trebuie să selectați Add Handler -> Handler de utilizator.

Pentru fiecare funcție și gestionare de mai sus, înlocuiți codul cu următoarele în Editorul scriptului. Nu uitați să salvați utilizând Control + S.

Pentru displayRestart:

 funcția MainAI.displayRestart () -------------------------------------------- ------------------------------------ local lUser = application.getCurrentUser () local lComp = hud.newComponent (lComp, 0, 0, 0), dacă (lComp ~ = nil) atunci hud.setComponentPosition (lComp, 50, 50) hud.setComponentSize (lComp, 100, 10) hud.setComponentBackgroundColor .setComponentBorderColor (lComp, 0, 0, 0, 0) hud.setComponentVisible (lComp, true) hud.setComponentZOrder (lComp, 255) hud.setLabelText (lComp, "Restartarea jocului") hud.setDefaultFont hud.setLabelTextHeight (lComp, 100) hud.setLabelTextAlignment (lComp, hud.kAlignCenter, hud.kAlignCenter) sfârșitul --------------------------- -------------------------------------------------- --- Sfârșit --------------------------------------------------------------------------------

Pentru cerereRestart:

 funcție MainAI.requestRestart () -------------------------------------------- ------------------------------------ application.restart () --------- -------------------------------------------------- --------------------- Sfârșit --------------------------------------------------------------------------------

Pentru resetare:

 funcție MainAI.reset () -------------------------------------------- ------------------------------------ this.prevTouchCount (0) this.prevY0 (0) - -------------------------------------------------- ---------------------------- Sfârșit --------------------------------------------------------------------------------

Pentru onInit:

 funcția MainAI.onInit () -------------------------------------------- ------------------------------------ aplicație.setCurrentUserScene ("MyScene") application.setOption (aplicație. kOptionViewportRotation, 3) local lCamera = application.getCurrentUserActiveCamera () object.setTranslation (lCamera, 6, 7, 5, obiect.kGlobalSpace) object.lookAt (lCamera, 0, 1.9, -1, object.kGlobalSpace, 1) this.egg (scene.getTaggedObject (application.getCurrentUserScene (), "egg")) input.enableMultiTouch (this.getUser (), true) this.reset () ----------------- -------------------------------------------------- ------------- Sfârșit --------------------------------------------------------------------------------

Pentru onTouchSequenceBegin:

 funcția MainAI.onTouchSequenceBegin () -------------------------------------------- ------------------------------------ this.reset () --------- -------------------------------------------------- --------------------- Sfârșit --------------------------------------------------------------------------------

Pentru onTouchSequenceChange:

 funcție MainAI.onTouchSequenceChange (nTaps0, nX0, nY0, nTaps1, nX1, nY1, nTaps2, nX2, nY2, nTaps3, nX3, nY3, nTaps4, nX4, nY4) --------------- -------------------------------------------------- --------------- local touchCount = 0 dacă (nTaps0> 0), apoi touchCount = 1 capăt dacă (nTaps1> 0), apoi touchCount = 2 end dacă (nTaps2> 0) 3 sfarsit daca (nTaps3> 0) apoi touchCount = 4 sfarsit daca (nTaps4> 0) apoi touchCount = 5 sfarsit daca (touchCount == this.prevTouchCount ()) atunci daca (touchCount ==1) prevY0 ()) apoi local d = -1 object.sendEvent (this.egg (), "EggAI", "onCaptureInput", d) elseif (nY0 < this.prevY0()) then local d = 1 object.sendEvent ( this.egg ( ), "EggAI", "onCaptureInput", d ) end elseif(touchCount == 2) then if(math.abs (nY0 - nY1) > 0.2), apoi this.displayRestart () this.postEvent (1, "requestRestart") end end end - stoca variabilele acestui eveniment pentru următorul eveniment this.prevTouchCount (touchCount) this.prevY0 (nY0) ------- -------------------------------------------------- ----------------------- Sfârșit --------------------------------------------------------------------------------

Pentru onTouchSequenceEnd:

 funcția MainAI.onTouchSequenceEnd () -------------------------------------------- ------------------------------------ this.reset () --------- -------------------------------------------------- --------------------- Sfârșit --------------------------------------------------------------------------------

Acum, apăsați F7 pentru a compila totul. Ar trebui să vedeți 0 erori și 0 avertismente.

Figura 56. Rezultatele compilației

Animați jocul pentru a testa

Acum, să testăm jocul. În meniul barei de sus, selectați Animație. Apoi, selectați Afișaj -> Dimensiune -> Android -> 480x800 după cum se arată mai jos.

Figura 57. Selectarea dimensiunii afișajului

Apoi, selectați Display -> View Mode -> Runtime.

Figura 58. Selectând modul Vizualizare

Apăsați F9 pentru a începe animarea. Jocul începe să joace după cum urmează.

Figura 59. Animarea jocului

Rețineți că nu puteți muta oul în acest punct, deoarece mișcarea de ouă este controlată prin intermediul evenimentelor touch touch. Prin urmare, testul efectiv de mutare a oului se poate face numai după instalarea acestuia într-un dispozitiv Android. În timp ce animați în Editorul ShiVa, rața și oul se vor mișca liber fără nici o intrare. În timpul mișcării libere, ei se pot ciocni unul câte unul din când în când. Când se întâmplă acest lucru, rața își va schimba direcția de rotație pe axa globală. De asemenea, veți observa că după fiecare coliziune va fi deschis un browser pentru afișarea adresei http://www.stonetrip.com. Acest lucru se datorează următoarei linii în funcție DuckAI.onSensorCollisionBegin:

... system.openURL ("http://www.stonetrip.com", "")

Scopul acestei linii este de a vibra aparatul în momentul unei coliziuni. Vom edita codul Java în Eclipse pentru a suprascrie system.openURL () pentru a vibra dispozitivul în loc să deschidă un browser. Deocamdată, puteți împiedica editorul ShiVa să deschidă automat un browser în timpul animației. În acest scop, comentați linia de cod în DuckAI.onSensorCollisionBegin ca mai jos și apoi recompilați înainte de a începe animația.

... --system.openURL ("http://www.stonetrip.com", "")

Cu toate acestea, nu uitați să eliminați linia dublă (-) și să recompilați totul înainte de a exporta jocul.


Exportați jocul

După ce am finalizat dezvoltarea jocului nostru, acum îl vom exporta pentru a fi utilizat de ShiVa Authoring Tool.

În Data Explorer, evidențiați folderul Jocuri și selectați Duck. Din meniul cu butonul din dreapta, selectați Exportă joc, după cum se arată mai jos.

Figura 60. Exportarea jocului

Selectați un dosar local, de ex. D: \ temp. De asemenea, selectați pachetul Runtime pentru Android. Faceți clic pe Export. (Vezi mai jos.)

Figura 61. Dialogul de export

Va apărea un dialog de progres, după cum se arată mai jos.

Figura 62. Dialogul progresului exportului

Așteptați până la finalizarea exportului și apăsați OK pentru a închide fereastra de dialog. Vezi mai jos:

Figura 63. Renunțați la Dialogul progresului exportului

Acum, ar trebui să vedeți un fișier numit Duck.stk în directorul local pe care ați ales să îl exportați.


Instrumentul de creație Shiva

În această secțiune vom discuta instrumentul Shiva Authoring Tool. După cum sa menționat anterior, scopul principal al instrumentului ShiVa Authoring Tool este de a converti un joc, creat prin editorul ShiVa, într-o aplicație care poate fi implementată într-un anumit dispozitiv. Mai jos, vom descrie pașii pentru a transforma jocul într-o aplicație Android.

Pregătiți dispozitivul Android pentru instalare

Deoarece instrumentul Shiva Authoring Tool poate fi folosit pentru a instala jocul în dispozitivul Android, trebuie să pregătiți dispozitivul pentru instalare. Mai întâi, în Setări aplicație, verificați sursele necunoscute, după cum se arată mai jos.

Figura 64. Setări aplicație dispozitiv

Apoi, în opțiunile de dezvoltare ale dispozitivului, verificați depanarea USB după cum se arată mai jos.

Figura 65. Opțiunile de dezvoltare a dispozitivului

De asemenea, asigurați-vă că dispozitivul dvs. este conectat la dispozitivul de dezvoltare printr-un cablu USB. Rețineți că atunci când conectați pentru prima dată un anumit dispozitiv Android la computerul de dezvoltare, Windows va instala driverul de dispozitiv corespunzător în computer. Este posibil să fie necesar să îndreptați Expertul Adăugare Hardware la locația folderului de instalare SDK pentru Android pentru a găsi un driver potrivit.

Autorizarea proiectului

Așa cum am discutat mai devreme în tutorial, cele două tipuri de creație disponibile în Shiva Authoring Tool sunt Project and APK Package. Autorizarea proiectului generează un proiect Eclipse pentru a personaliza în continuare aplicația de joc în Eclipse. Autorizarea pachetului APK generează un fișier APK Android pentru instalarea directă a aplicației de joc în dispozitiv. Deoarece vrem să personalizăm jocul să vibreze dispozitivul în momentul unei coliziuni, vom examina mai întâi procesul de creație pentru proiect.

În instrucțiunile de mai jos, se presupune că Duck.stk este instalat în D: \ tmp. Dacă ați stocat-o într-o altă locație, schimbați instrucțiunile corespunzătoare.

În pregătirea pentru această secțiune, extrageți app_icon.png și app_splash.png din arhiva de descărcare care însoțește acest tutorial și salvați-le sub un dosar local, de ex. D: \ tmp. Fișierul app_splash.png va fi afișat ca pagină de start în dispozitiv pentru joc atunci când acesta va porni. Aplicația app_icon.png va fi afișată pe ecranul de pornire al dispozitivului Android, după cum se arată mai jos.

Figura 66. Locația pictogramei

Aduceți Shiva Authoring Tool. Selectați Android din navigația din stânga. Faceți clic pe imaginea cu săgeată din secțiunea "Sau începeți acum ...", după cum se arată mai jos.

Figura 67. Pagina de pornire pentru instrumentul de creație Shiva

În pasul 1, selectați Duck.stk, app_icon.png și app_splash.png din folderele locale ale computerului, după cum se arată mai jos. Aici, observați că separatorul de foldere este slash (/), nu întârziere (\). Apăsați pe Următorul.

Figura 68. Instrumentul de creație Shiva Pasul 1

În Pasul 2, sub Tip autor, selectați Proiect. Pentru tipul de identificator Bundle într-un nume, de exemplu com.shiva3d.demo. Acest nume corespunde numelui pachetului Java. Acceptați setările implicite pentru versiunea și codul versiunii (vedeți mai jos). Faceți clic pe Pasul 3: Construiți.

Figura 69. Instrumentul de creație Shiva Pasul 2 - Proiect

La Pasul 3, selectați Tip construire: Dezvoltare și lăsați toate casetele de selectare neconfirmate după cum se arată mai jos.

Figura 70. Instrumentul de creație Shiva Pasul 3 - Construiți tipul

De asemenea, efectuați următoarele selecții:

  • Backend audio: Implicit
  • Suport minim pentru sistemul de operare: Android 3.2 (nivel API: 13)
  • Furnizați un dosar de ieșire, de ex. D: \ temp
  • Acceptați opțiunea Fără script pentru scriptul personalizat de postare

Acestea sunt prezentate mai jos.

Figura 71. Instrumentul de creație Shiva Pasul 3

Rețineți că obiectivul nostru principal în acest tutorial este Android 3.2, pentru care aplicația a fost testată.

Faceți clic pe Construiți. Aceasta va aduce viziunea consolei. Dacă totul merge în mod corespunzător, veți vedea un mesaj care spune "Construit terminat cu succes!", După cum se arată mai jos. De asemenea, în directorul de ieșire (D: \ temp) ar trebui să vedeți Duck_Android.zip.

Figura 72. Instrumentul de creare Shiva - construit terminat

Autorizarea pachetului APK

Aici vom examina procesul de creare folosit pentru a crea un fișier APK (care este o aplicație Android) care poate fi instalat direct într-un dispozitiv. Ca o opțiune, puteți instala jocul în aparat ca parte a construirii. Pentru a face acest lucru, trebuie să fi finalizat pașii descriși mai sus în "Pregătiți dispozitivul Android pentru instalare".

Rețineți că dacă creați pachet APK, personalizarea codului în Eclipse nu va fi posibilă. Ca urmare, caracteristica vibratoare nu va fi disponibilă (adică atunci când rața și oul se ciocnesc, dispozitivul nu va vibra). Din acest motiv, trebuie să editați DuckAI.onSensorCollisionBegin și să comentați sau să eliminați următorul rând:

 system.openURL ("http://www.stonetrip.com", "")

Apoi, compilați și exportați Duck.stk ca și înainte.

Acum, ridicați Shiva Authoring Tool și parcurgeți aceiași pași ca mai sus, cu următoarele excepții.

În pasul 2, selectați tipul de redactare ca pachet APK și nu ca Dezvoltare:

Figura 73. Shiva Authoring Tool Pasul 2 - pachet APK

La Pasul 3, bifați Instalați pe dispozitivul conectat (vedeți mai jos)

Figura 74. Instrumentul de creație Shiva Pasul 3 - Instalare

Când etapele de construire sunt finalizate, în directorul de ieșire ar trebui să vedeți Duck-debug.apk. De asemenea, jocul trebuie să fi fost instalat pe dispozitiv. (Rețineți că, dacă nu doriți să instalați aplicația în dispozitiv ca parte a construirii, nu verificați Instalați pe dispozitivul conectat.Puteți instala Duck-debug.apk în dispozitivul dvs. altă dată utilizând ADB Tool în Android SDK .)


Observații finale pentru partea 4

În partea a 4-a, am terminat codarea pentru EggAI și MainAI și am testat unitatea prin animarea jocului. Apoi am exportat jocul de la Editorul ShiVa pentru importul în Shiva Authoring Tool. În cele din urmă, am discutat două opțiuni diferite de creație în Instrumentul de editare Shiva, unul pentru generarea unui executabil Android și altul pentru generarea unui proiect Eclipse. În partea a 5-a, vom începe prin a învăța cum să personalizăm jocul în Eclipse. Aceasta va include configurarea proiectului Eclipse, modificările de cod, construirea codului Java și bibliotecile native. În acest moment, vom fi finalizat tutorialul în ceea ce privește dezvoltarea și implementarea. În restul părții 5 vom examina codul și vom discuta cum să portăm jocul pe dispozitivele iOS.


Cod