Curieux de développer des jeux en 3D? C'est le moment d'apprendre! Cette série de tutoriels en cinq parties montrera comment créer un jeu simple avec ShiVa3D Suite, un moteur de jeu 3D multiplate-forme et un outil de création. C’est le troisième volet de la série, où vous apprendrez à éditer les scènes d’un jeu et à commencer à coder les modèles AI..
Dans la deuxième partie, nous avons commencé par décrire comment développer le jeu avec ShiVa Editor. Nous avons présenté les modules de l'éditeur ShiVa utilisés lors du développement de l'application du tutoriel, et nous avons parlé des fichiers de modèle Collada représentant les personnages principaux de l'application. Nous avons ensuite discuté des étapes initiales nécessaires à la création de l'application, telles que la création du jeu et de la scène et l'importation des modèles Collada. Dans la partie 3, nous montrerons comment modifier la scène de notre application. Nous allons également commencer à entrer le code pour les AIModels du jeu. En particulier, nous allons entrer le code pour le DuckAI.
Nous allons maintenant définir différentes propriétés de la scène.
Nous supposons que le fichier image marbre.jpg a été copié sous le dossier nommé D: \ temp \ skybox. Dans votre environnement, si vous copiez le fichier dans un autre emplacement, veillez à modifier les instructions ci-dessous en conséquence..
Dans l'explorateur de données, accédez à Importer -> Texture. Dans la boîte de dialogue, sélectionnez le fichier comme indiqué ci-dessous et cliquez sur Importer..
Maintenant, dans le dossier Textures de DataExplorer, vous devriez voir une texture appelée marbre.
Modifions divers attributs de la scène à l'aide de l'éditeur d'ambiance. Placez Ambience Editor et Data Explorer côte à côte et double-cliquez sur MyScene dans le dossier Scenes. À ce stade, vous pouvez être invité à enregistrer la scène, comme indiqué ci-dessous. Cliquez sur oui et fermez la boîte de dialogue..
Maintenant, l'éditeur d'ambiance et l'explorateur de données doivent apparaître côte à côte comme suit.
Dans la section éclairage, ajustez la couleur de la lucarne pour obtenir un ton jaune pâle, comme indiqué ci-dessous.
Pour chacun des éléments skybox de la section Sky, sélectionnez le marbre.
Amenez Game Editor et Data Explorer côte à côte. Sélectionnez Canard -> Jeux dans l'explorateur de données et double-cliquez sur Canard. Cela fera apparaître le jeu dans l'éditeur de jeu. Sélectionnez Ressources -> Polices dans l'explorateur de données. Dans l'éditeur de jeu, appuyez sur l'onglet Ressources. Glissez et déposez la police par défaut de l'explorateur de données dans l'onglet Ressources (voir ci-dessous)..
Nous allons maintenant ajouter un tag à egg. (Un objet peut être recherché et situé dans un jeu par programmation, en fonction de son tag.) Placez l'explorateur de scènes et l'explorateur de données côte à côte. Dans l'explorateur de données, sélectionnez Canard -> Scènes -> MyScene et double-cliquez sur. À ce stade, vous pouvez être invité à enregistrer MyScene comme suit. Cliquez sur oui et fermez la boîte de dialogue..
Dans l'explorateur de scènes, mettez la sphère en surbrillance et dans le menu contextuel, sélectionnez la balise Modifier la sélection. Dans la boîte de dialogue, tapez "oeuf" pour la balise. Ces étapes sont montrées dans les deux images consécutives ci-dessous.
Nous allons maintenant créer les AIModels et le code associé pour notre jeu. Rappelez-vous de la discussion précédente que les AIModels représentent le comportement des objets dans un jeu. Le canard et l'oeuf auront chacun leurs propres modèles, DuckAI et EggAI, respectivement. De plus, le jeu lui-même aura son propre AIModel, appelé MainAI. MainAI sera responsable de l’initialisation de la caméra et de la scène, ainsi que du traitement et de la distribution des événements utilisateur..
Passons d'abord en revue certains concepts relatifs aux AIModels, en empruntant des informations à la documentation d'aide de ShiVa Editor..
Commençons maintenant à définir les AIModels dans notre jeu. Placez l’explorateur de scènes et l’explorateur de données côte à côte et double-cliquez sur MyScene dans l’explorateur de données sous le dossier Scènes. (Si vous y êtes invité, enregistrez MyScene et fermez la boîte de dialogue.) Dans l'explorateur de scènes, sélectionnez l'onglet Objets, sélectionnez Canard, puis cliquez avec le bouton droit de la souris sur Contrôleurs -> AI -> Créer une IA. Ceci est montré ci-dessous.
Nommez l'IA sous DuckAI dans la boîte de dialogue, comme indiqué ci-dessous, puis appuyez sur OK..
De même, dans l'onglet Objets de l'explorateur de scène, sélectionnez une sphère, puis cliquez avec le bouton droit de la souris sur le menu Contrôleurs -> AI -> Créer une AI. Nommez l'IA sous EggAI dans la boîte de dialogue et cliquez sur OK..
Dans l'explorateur de données, sélectionnez Créer -> Ressource -> AIModel (voir ci-dessous). Nommez-le MainAI.
Dans l'explorateur de données, vous devez maintenant voir trois modèles AIM dans le dossier Ressources -> Modèles: DuckAI, EggAI, MainAI. Ouvrez l'éditeur de jeu et l'explorateur de données côte à côte. Dans Game Editor, sélectionnez l'onglet Main. Dans le dossier Ressources -> AIModels, faites glisser MainAI dans la zone de texte de l'utilisateur MainAI dans Game Editor (voir ci-dessous)..
Ouvrez maintenant l'éditeur AIModel Editor et l'explorateur de données. Double-cliquez sur DuckAI, EggAI et MainAI. Vous devriez voir un onglet distinct pour chacun des modèles AIM dans l'éditeur AIModel, comme indiqué ci-dessous..
Sous l'onglet DuckAI, cliquez sur Ajouter une variable et ajoutez une variable de type boolean. Nommez-le positif avec true comme valeur initiale (voir ci-dessous). Cliquez sur OK pour fermer la boîte de dialogue..
De la même manière, ajoutez une variable nommée 'score' où le type est 'nombre' et la valeur initiale est 0. Même si vous le tapez 0, la variable sera initialisée en tant que float, c'est-à-dire 0.000.
Toujours sur l'onglet DuckAI, cliquez sur Ajouter un gestionnaire -> onEnterFrame, comme indiqué ci-dessous.
De même, cliquez sur Ajouter un gestionnaire -> onInit. Enfin, cliquez sur Ajouter un gestionnaire -> Gestionnaire d’objets -> onSensorCollisionBegin (voir ci-dessous)..
Maintenant, l'onglet DuckAI ressemblera à ceci.
Amenez l'éditeur AIModel Editor et l'éditeur de script côte à côte. Dans l'onglet DuckAI de l'éditeur AIModel Editor, double-cliquez sur OnInit (). Un code squelette pour cela sera ouvert dans l'éditeur de script comme indiqué ci-dessous.
Copiez et collez le texte suivant dans l’éditeur de script, en remplaçant complètement le code existant (une révision du code sera donnée dans une section ultérieure). Dans l'éditeur de script, cliquez sur Ctrl + S pour enregistrer le script..
fonction DuckAI.onInit () ------------------------------------------------ ------------------------------------ object.setTranslation (this.getObject (), 2, 3, 2, object.kGlobalSpace) local lUser = application.getCurrentUser () local lComp = hud.newComponent (lUser, hud.kComponentTypeLabel, "HUD.disp") si (lComp ~ = nil) puis hud.setComponentPosition (lComponentPosition, 75, 75, ) hud.setComponentSize (lComp, 30, 10) hud.setComponentBackgroundColor (lComp, 0, 0, 0, 0) hud.setComponentBorderColor (lComp, 0, 0, 0, 0) hud.setComponentVorder (LComp, 0, 0, 0, 0) (lComp, 255) hud.setLabelText (lComp, string.format ("Score:% 2i", this.score ())) hud.setDefaultFont (lUser, "DefaultFont") hud.setLabelTextHeight (lComp, 100) hud.setLabelTextAlignment (lComp, hud.kAlignCenter, hud.kAlignCenter) fin -------------------------------------- ------------------------------------------ fin --------------------------------------------------------------------------------
De la même manière, remplacez le code pour onEnterFrame comme suit.
fonction DuckAI.onEnterFrame () ------------------------------------------------ ------------------------------------ local lObject = this.getObject () if (this.isPositive ( )) puis object.rotateAroundTo (lObject, 0,0,0,0,0,75,0, object.kGlobalSpace, 0.5) sinon object.rotateAroundTo (lObject, 0,0,0,0, -0,75,0, object.kGlobalSpace , 0.5) fin local x, y, z = object.getRotation (lObject, object.kLocalSpace) object.setRotation (lObject, x + 0.3, y + 0.5, z + 1, object.kLocalSpace) ------- -------------------------------------------------- ----------------------- fin --------------------------------------------------------------------------------
Ensuite, remplacez le code pour onSensorCollisionBegin par le suivant:
fonction DuckAI.onSensorCollisionBegin (nSensorID, hTargetObject, nTargetSensorID) ------------------------------------------- ----------------------------------------- this.score (this.score () +1) local lComp = hud.getComponent (application.getCurrentUser (), "HUD.disp") if (lComp), puis hud.setLabelText (lComp, string.format ("Score:% 2i", this.score ()) ) end if (this.isPositive ()) alors this.isPositive (false) sinon this.isPositive (true) end system.openURL ("http://www.stonetrip.com", "") ------ -------------------------------------------------- ------------------------ fin --------------------------------------------------------------------------------
Maintenant, nous avons terminé avec les variables et le code pour DuckAI.
Dans la troisième partie, nous avons montré comment modifier la scène de notre application. Nous avons également commencé à saisir le code des AIModels du jeu. Jusqu'à présent, nous avons terminé le code pour le DuckAI. Dans la partie 4, nous terminerons le codage des modèles AIM restants, EggAI et MainAI, et effectuerons des tests unitaires en animant le jeu. Nous exporterons ensuite le jeu à partir de l'éditeur ShiVa pour l'importer dans l'outil de création de Shiva. Enfin, nous allons discuter de deux options de création différentes dans l'outil de création de Shiva: une pour générer un exécutable Android et une autre pour générer un projet Eclipse..