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 treia tranșă a seriei, unde veți învăța cum să editați scenele unui joc și să începeți să codificați modelele AI.
În partea a doua, am început prin descrierea modului de a dezvolta jocul folosind ShiVa Editor. Am introdus modulele editorului ShiVa folosite în dezvoltarea aplicației tutorial și am vorbit despre fișierele modelului Collada reprezentând caracterele principale din aplicație. Am discutat apoi câțiva pași inițiale necesare pentru crearea aplicației, cum ar fi crearea jocului și scena și importul modelelor Collada. În partea a 3-a, vom arăta cum să editați scena aplicației noastre. De asemenea, vom începe să introduceți codul pentru modelele AIM ale jocului. În special, vom introduce codul pentru DuckAI.
Acum vom seta diferite proprietăți ale scenei.
Presupunem că fișierul imagine marble.jpg a fost copiat sub folderul numit D: \ temp \ skybox. În mediul dvs., dacă copiați fișierul într-o altă locație, asigurați-vă că modificați instrucțiunile de mai jos.
În DataExplorer, mergeți la Import -> Textură. În dialog, selectați fișierul după cum se arată mai jos și faceți clic pe Import.
Acum, în dosarul Texturi din DataExplorer, ar trebui să vedeți o textură numită marmură.
Să editați diferite atribute ale scenei utilizând editorul de ambianță. Aduceți Editorul de Ambient și Data Explorer una lângă alta și faceți dublu clic pe MyScene din dosarul Scene. În acest moment, vi se poate solicita salvarea scenei, după cum se arată mai jos. Faceți clic pe da și închideți dialogul.
Editorul Ambient și Data Explorer ar trebui să pară alături, după cum urmează.
În secțiunea Iluminare, reglați culoarea Skylight pentru a obține un ton galben decolorat, după cum se arată mai jos.
Pentru fiecare dintre elementele Skybox din secțiunea Sky, selectați marmura.
Aduceți Editorul de jocuri și Data Explorer una lângă alta. Selectați Duck -> Games în Data Explorer și faceți dublu clic pe Duck. Acest lucru va aduce jocul în Editorul de jocuri. Selectați Resurse -> Fonturi în Data Explorer. În Editorul de jocuri, apăsați fila Resurse. Trageți și lăsați Fontul implicit din Data Explorer în fila Resurse (vedeți mai jos).
Vom adăuga acum o etichetă în ou. (Un obiect poate fi căutat și localizat într-un joc programat bazat pe eticheta acestuia.) Aduceți Scene Explorer și Data Explorer una lângă alta. În Data Explorer, selectați Duck -> Scenes -> MyScene și faceți dublu clic. În acest moment, vi se poate solicita să salvați MyScene după cum urmează. Faceți clic pe da și închideți dialogul.
În Exploratorul de scene, evidențiați sfera și din meniul cu butonul din dreapta selectați opțiunea Editare etichetă de selecție. În dialog, tastați "ou" pentru etichetă. Acești pași sunt afișați în cele două imagini consecutive de mai jos.
Vom crea acum AIModelele și codul asociat pentru jocul nostru. Reamintim din discuția anterioară că AIModelele reprezintă comportamentul obiectelor dintr-un joc. Duckul și oul vor avea fiecare propriile lor modele AIModels, DuckAI și EggAI. În plus, jocul în sine va avea propriul AIModel, numit MainAI. MainAI va fi responsabil pentru inițializarea camerei și scena, precum și pentru procesarea și expedierea evenimentelor utilizatorilor.
Să analizăm mai întâi câteva dintre conceptele referitoare la AIModeluri, împrumutând informații din documentația Ajutor pentru Editorul ShiVa.
Să începem acum să definim AIModelele în jocul nostru. Aduceți Explorer Explorer și Data Explorer una lângă alta și faceți dublu clic pe MyScene în Data Explorer din dosarul Scenele. (Dacă vi se solicită, salvați MyScene și închideți dialogul.) În Explorer Explorer, selectați fila Obiecte și selectați rață, apoi faceți clic dreapta pe meniul Controllers -> AI -> Create AI. Acest lucru este prezentat mai jos.
Denumiți AI drept DuckAI în caseta de dialog, după cum se arată mai jos, și apăsați OK.
În mod similar, în fila Obiecte de explorare a Scenei, selectați sfera, apoi faceți clic dreapta pe meniul Controlere -> AI -> Creare AI. Denumiți AI ca EggAI în dialog și faceți clic pe OK.
În Data Explorer, selectați Creare -> Resurse -> AIModel (a se vedea mai jos). Denumiți-l MainAI.
În Data Explorer, ar trebui să vedeți acum trei AIModeluri în directorul Resources -> AIModels: DuckAI, EggAI, MainAI. Deschideți Editorul de jocuri și cel de date de tip Explorer unul lângă celălalt. În Editorul de jocuri, selectați fila Principal. Din dosarul Resurse -> AIModeluri, trageți și fixați MainAI în zona de text a utilizatorului MainAI din Editorul de jocuri (vedeți mai jos).
Acum, deschideți Editorul AIModel și Data Explorer una lângă alta. Faceți dublu clic pe butoanele DuckAI, EggAI și MainAI. Ar trebui să vedeți o filă separată pentru fiecare dintre modelele AIModel în AIModel Editor așa cum se arată mai jos.
În fila DuckAI, faceți clic pe Adăugare variabilă și adăugați o variabilă de tip boolean. Denumirea este pozitivă cu valoarea adevărată fiind valoarea inițială (prezentată mai jos). Faceți clic pe OK pentru a renunța la dialog.
În mod similar, adăugați o variabilă numită "scor" în cazul în care tipul este "număr", iar valoarea inițială este 0. Chiar dacă tastați-o ca 0, variabila va fi inițializată ca float, adică 0.000.
Încă în fila DuckAI, faceți clic pe Add Handler -> onEnterFrame, după cum se arată mai jos.
În mod similar, faceți clic pe Add Handler -> onInit. În cele din urmă, faceți clic pe Add Handler -> Object Handler -> onSensorCollisionBegin (vedeți mai jos).
Acum, fila DuckAI va arata astfel:.
Aduceți editorul AIModel și editorul de scripturi alăturate. În fila DuckAI a editorului AIModel, faceți dublu clic peInit (). Un cod de schelet pentru acest lucru va fi deschis în Editorul scriptului, după cum se arată mai jos.
Copiați și lipiți următoarele în editorul de script, înlocuind complet codul existent (o revizuire a codului va fi dată într-o secțiune ulterioară). În editorul Script faceți clic pe Control + S pentru a salva scriptul.
funcția DuckAI.onInit () -------------------------------------------- ------------------------------------ object.setTranslation (this.getObject (), 2, 3, 2, obiect.kGlobalSpace) local lUser = application.getCurrentUser () local lComp = hud.newComponent (lUser, hud.kComponentTypeLabel, "HUD.disp") dacă (lComp ~ = nil) ) lk.setComponentSize (lComp, 30, 10) hud.setComponentBackgroundColor (lComp, 0, 0, 0, 0) hud.setComponentBorderColor (lComp, 0, 0, 0, 0) hud.setComponentVisible (lComp, 255) hud.setLabelText (lComp, string.format ("Scor:% 2i", this.score ())) hud.setDefaultFont (lUser, "DefaultFont") hud.setLabelTextHeight (lComp, 100) hud.setLabelTextAlignment (lComp, hud.kAlignCenter, hud.kAlignCenter) sfârșitul -------------------------------------- ------------------------------------------ Sfârșit --------------------------------------------------------------------------------
În mod similar, înlocuiți codul pentruEnterFrame după cum urmează.
funcția DuckAI.onEnterFrame () -------------------------------------------- ------------------------------------ local lObject = this.getObject () dacă (this.isPositive ( )) apoi object.rotateAroundTo (lObject, 0,0,0,0,0,75,0, object.kGlobalSpace, 0,5) altceva object.rotateAroundTo (lObject, 0,0,0,0, -0,75,0, object.kGlobalSpace , 0.5) se termină local x, y, z = object.getRotation (lObject, object.kLocalSpace) object.setRotation (lObject, x + 0.3, y + 0.5, z + 1, object.kLocalSpace) -------------------------------------------------- ----------------------- Sfârșit --------------------------------------------------------------------------------
Apoi, înlocuiți codul pentruSensorCollisionBegin cu următoarele:
funcția DuckAI.onSensorCollisionBegin (nSensorID, hTargetObject, nTargetSensorID) --------------------------------------- ----------------------------------------- this.score (this.score () +1) locale lComp = hud.getComponent (application.getCurrentUser (), "HUD.disp") dacă (lComp) atunci hud.setLabelText (lComp, string.format ("Score:% 2i", this.score ) end if (this.isPositive ()) atunci this.isPositive (false) altceva this.isPositive (true) end system.openURL ("http://www.stonetrip.com", ") ------ -------------------------------------------------- ------------------------ Sfârșit --------------------------------------------------------------------------------
Acum am terminat cu variabilele și codul pentru DuckAI.
În partea a treia, am arătat cum să editați scena aplicației noastre. De asemenea, am început să introducem codul pentru AIModelele jocului. Până acum, am terminat codul pentru DuckAI. În partea a 4-a, vom termina codarea 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 autorizare diferite în Instrumentul de editare Shiva, unul pentru generarea unui executabil Android și altul pentru generarea unui proiect Eclipse.