Sei curioso di sviluppare il gioco in 3D? Ora è il momento di imparare! Questa serie di tutorial in cinque parti mostrerà come creare un gioco semplice con ShiVa3D Suite, un motore di gioco 3D multipiattaforma e uno strumento di authoring. Questa è la terza parte della serie, in cui imparerai come modificare le scene di un gioco e iniziare a codificare modelli AI.
Nella parte 2, abbiamo iniziato descrivendo come sviluppare il gioco usando ShiVa Editor. Abbiamo introdotto i moduli di ShiVa Editor utilizzati nello sviluppo dell'applicazione tutorial e abbiamo parlato dei file di modello Collada che rappresentano i personaggi principali dell'applicazione. Abbiamo quindi discusso alcuni passaggi iniziali necessari per creare l'applicazione, come la creazione del gioco e della scena e l'importazione dei modelli Collada. Nella parte 3, mostreremo come modificare la scena della nostra applicazione. Inizieremo anche a inserire il codice per gli AIModels del gioco. In particolare, inseriremo il codice per DuckAI.
Ora imposteremo varie proprietà della scena.
Supponiamo che il file immagine marble.jpg sia stato copiato nella cartella D: \ temp \ skybox. Nel tuo ambiente, se copi il file in un'altra posizione, assicurati di modificare di conseguenza le seguenti istruzioni.
Nel DataExplorer, vai a Importa -> Texture. Nella finestra di dialogo, seleziona il file come mostrato di seguito e fai clic su Importa.
Ora, nella cartella Textures di DataExplorer, dovresti vedere una texture chiamata marble.
Modifichiamo vari attributi della scena usando l'Editor Ambience. Accompagna parallelamente Ambience Editor e Data Explorer e fai doppio clic su MyScene nella cartella Scene. A questo punto, potrebbe essere richiesto di salvare la scena, come mostrato di seguito. Fare clic su Sì e chiudere la finestra di dialogo.
Ora, l'editor di Ambience e Data Explorer dovrebbero essere affiancati come segue.
Nella sezione Illuminazione, regola il colore del lucernario per ottenere un tono giallo sbiadito, come mostrato di seguito.
Per ciascuno degli elementi skybox nella sezione Sky, seleziona il marmo.
Porta l'editor di giochi e l'esploratore dei dati fianco a fianco. Seleziona Anatra -> Giochi in Data Explorer e fai doppio clic su Duck. Questo farà apparire il gioco nell'Editor di giochi. Seleziona Risorse -> Caratteri in Data Explorer. Nell'Editor dei giochi, premi la scheda Risorse. Trascina e rilascia il Carattere di Default da Data Explorer nella scheda Risorse (vedi sotto).
Ora aggiungeremo un tag all'uovo. (Un oggetto può essere ricercato e localizzato in un gioco a livello di programmazione in base al suo tag.) Porta Explorer di scena ed Explorer di dati affiancati. In Esplora dati, seleziona Anatra -> Scene -> MyScene e fai doppio clic. A questo punto, potrebbe essere richiesto di salvare MyScene come segue. Fare clic su Sì e chiudere la finestra di dialogo.
In Scene Explorer, evidenzia la sfera e dal menu di scelta rapida seleziona Modifica tag di selezione. Nella finestra di dialogo, digita "egg" per il tag. Questi passaggi sono mostrati nelle due immagini consecutive di seguito.
Ora creeremo gli AIModels e il codice associato per il nostro gioco. Ricordiamo dalla discussione precedente che gli AIModels rappresentano il comportamento degli oggetti in un gioco. The Duck and the Egg avranno rispettivamente i loro AIModels, DuckAI e EggAI. Inoltre, il gioco stesso avrà il suo AIModel, chiamato MainAI. Il MainAI sarà responsabile per l'inizializzazione della telecamera e della scena nonché per l'elaborazione e la distribuzione degli eventi utente.
Esaminiamo prima alcuni concetti relativi ad AIModels, prendendo in prestito informazioni dalla documentazione di aiuto di ShiVa Editor.
Cominciamo ora a definire gli AIModels nel nostro gioco. Visualizzate parallelamente Scene Explorer e Data Explorer e fate doppio clic su MyScene in Data Explorer nella cartella Scene. (Se richiesto, salva MyScene e chiude la finestra di dialogo.) In Scene Explorer, seleziona la scheda Oggetti e seleziona anatra, quindi fai clic con il pulsante destro del mouse su Controller -> AI -> Crea AI. Questo è mostrato sotto.
Denominare l'IA come DuckAI nella finestra di dialogo come mostrato di seguito e premere OK.
Analogamente, nella scheda Oggetti di Scene Explorer, seleziona sfera, quindi fai clic con il pulsante destro del mouse su Controller -> AI -> Crea AI. Dai un nome all'IA come EggAI nella finestra di dialogo e fai clic su OK.
In Data Explorer, selezionare Crea -> Risorsa -> AIModel (vedi sotto). Denominalo MainAI.
In Data Explorer, ora dovresti vedere tre AIModels nella cartella Risorse -> AIModels: DuckAI, EggAI, MainAI. Apri l'editor di giochi e l'Explorer Dati affiancati. In Game Editor, seleziona la scheda Principale. Da Risorse -> Cartella AIModels, trascina e rilascia MainAI nell'area di testo del MainAI dell'utente in Game Editor (vedi sotto).
Ora apri l'editor AIModel e l'Explorer dati affiancati. Fare doppio clic su DuckAI, EggAI e MainAI. Dovresti vedere una scheda separata per ciascuno degli AIModels in AIModel Editor, come mostrato di seguito.
Nella scheda DuckAI, fai clic su Aggiungi variabile e aggiungi una variabile di tipo booleano. Nome è positivo con vero essere il valore iniziale (mostrato sotto). Fare clic su OK per chiudere la finestra di dialogo.
Allo stesso modo, aggiungi una variabile denominata 'punteggio' in cui il tipo è 'numero' e il valore iniziale è 0. Anche se lo digiti come 0, la variabile verrà inizializzata come float, ovvero 0,000.
Sempre nella scheda DuckAI, fai clic su Aggiungi gestore -> onEnterFrame, come mostrato di seguito.
Allo stesso modo, fai clic su Aggiungi gestore -> onInit. Infine, fai clic su Aggiungi gestore -> Gestore oggetti -> onSensorCollisionBegin (vedi sotto).
Ora, la scheda DuckAI sarà simile alla seguente.
Porta l'editor AIModel e l'editor degli script fianco a fianco. Nella scheda DuckAI di AIModel Editor, fai doppio clic su Init (). Un codice di scheletro per questo verrà aperto nello Script Editor come mostrato di seguito.
Copia e incolla quanto segue nell'editor degli script, sostituendo completamente il codice esistente (una revisione del codice verrà fornita in una sezione successiva). Nello Script Editor fai clic su Control + S per salvare lo script.
function DuckAI.onInit () -------------------------------------------- ------------------------------------ object.setTranslation (this.getObject (), 2, 3, 2, object.kGlobalSpace) lUser locale = application.getCurrentUser () locale lComp = hud.newComponent (lUser, hud.kComponentTypeLabel, "HUD.disp") if (lComp ~ = nil) quindi hud.setComponentPosition (lComp, 75, 7 ) hud.setComponentSize (lComp, 30, 10) hud.setComponentBackgroundColor (lComp, 0, 0, 0, 0) hud.setComponentBorderColor (lComp, 0, 0, 0, 0) hud.setComponentVisible (lComp, true) hud.setComponentZOrder (lComp, 255) hud.setLabelText (lComp, string.format ("Punteggio:% 2i", this.score ())) hud.setDefaultFont (lUser, "DefaultFont") hud.setLabelTextHeight (lComp, 100) hud.setLabelTextAlignment (lComp, hud.kAlignCenter, hud.kAlignCenter) end -------------------------------------- ------------------------------------------ fine --------------------------------------------------------------------------------
In modo simile, sostituire il codice per onEnterFrame come segue.
function DuckAI.onEnterFrame () -------------------------------------------- ------------------------------------ local lObject = this.getObject () if (this.isPositive ( )) then object.rotateAroundTo (lObject, 0,0,0,0,0,75,0, object.kGlobalSpace, 0,5) else object.rotateAroundTo (lObject, 0,0,0,0, -0,75,0, object.kGlobalSpace , 0.5) end local x, y, z = object.getRotation (lObject, object.kLocalSpace) object.setRotation (lObject, x + 0.3, y + 0.5, z + 1, object.kLocalSpace) ------- -------------------------------------------------- ----------------------- fine --------------------------------------------------------------------------------
Quindi, sostituire il codice per onSensorCollisionBegin con quanto segue:
function DuckAI.onSensorCollisionBegin (nSensorID, hTargetObject, nTargetSensorID) --------------------------------------- ----------------------------------------- this.score (this.score () +1) local lComp = hud.getComponent (application.getCurrentUser (), "HUD.disp") if (lComp) then hud.setLabelText (lComp, string.format ("Punteggio:% 2i", this.score ()) ) end if (this.isPositive ()) then this.isPositive (false) else this.isPositive (true) end system.openURL ("http://www.stonetrip.com", "") ------ -------------------------------------------------- ------------------------ fine --------------------------------------------------------------------------------
Ora abbiamo finito con le variabili e il codice per DuckAI.
Nella parte 3, abbiamo mostrato come modificare la scena della nostra applicazione. Abbiamo anche iniziato a inserire il codice per gli AIModels del gioco. Finora, abbiamo completato il codice per DuckAI. Nella parte 4, termineremo la codifica dei rimanenti AIModels, EggAI e MainAI, ed eseguiremo test unitari animando il gioco. Eseguiremo quindi il gioco dall'Editor ShiVa per l'importazione nello Strumento di authoring di Shiva. Infine, discuteremo due diverse opzioni di authoring nello Shiva Authoring Tool, uno per generare un eseguibile Android e un altro per generare un progetto Eclipse.