DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Java Zone»Création d’un moteur de jeu
    Java Zone

    Création d’un moteur de jeu

    novembre 23, 2021
    Création d'un moteur de jeu
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    J’ai créé le moteur Tyracorn en Java à peu près à partir de zéro, en n’utilisant qu’un petit nombre de bibliothèques de base. Si vous envisagez de faire de même, continuez à lire.

    Attentes

    Si votre objectif est de publier les jeux rapidement, utilisez simplement Unity, Unreal Engine ou un autre excellent produit disponible. Cependant, si vous avez des attentes différentes et du temps pour cela, allez-y. Voici les miens.

    • Apprendre et se détendre.
    • Ok pour passer beaucoup de temps à étudier et à pivoter sans progrès visible.
    • Le code est fait selon le livre Robust Java Standards, y compris de nombreux tests unitaires.
    • L’objectif est de produire des jeux 3D d’apparence décente. Pas besoin de rivaliser avec les titres AAA.
    • Ciblage PC et Android.

    Même avec ceux-ci, il m’a fallu plus d’un an pour produire un moteur raisonnablement complet (j’ai fait beaucoup d’autres choses aussi, sinon cela pourrait prendre environ 4 mois).

    Journal de développement

    Configuration du projet

    J’ai choisi Java avec Maven comme base. Littéralement commencé avec deux projets tyracorn-core et tyracorn-desktop ayant l’idée suivante pour l’avenir.

    • code-tyracorn – c’est la bibliothèque qui contient tout le code indépendant de la plate-forme. Par exemple, les interfaces de pilote, les structures de données, les moteurs à corps rigide et d’autres éléments indépendants de la plate-forme.
    • tyracorn-desktop – c’est aussi la bibliothèque, qui a tyracorn-core comme dépendance transitive. Implémente les interfaces tyracorn-core pour le bureau.
    • Développement de jeu – ajouter tyracorn-desktop en tant que dépendance et écrire le code suivant les normes du moteur Tyracorn.
    • Compilation de fabrication – la compilation de production (par exemple pour Desktop, Android) est effectuée par un outil séparé (nous y reviendrons plus tard).

    Graphique

    Graphique avec des commandes simples. Très agréable car la progression est rapide et visuelle. J’ai choisi d’utiliser OpenGL via la bibliothèque de liaisons JOGL. Et voici de bonnes ressources pour commencer.

    La très bonne chose à propos de la bibliothèque JOGL est qu’elle est entièrement disponible dans le référentiel Maven Central et qu’elle fonctionne bien pour les ordinateurs de bureau. Utilisez simplement les dépendances suivantes.

    <dependency>
    	<groupId>org.jogamp.gluegen</groupId>
    	<artifactId>gluegen-rt-main</artifactId>
    	<version>2.3.1</version>
    </dependency>
    <dependency>
    	<groupId>org.jogamp.jogl</groupId>
    	<artifactId>jogl-all-main</artifactId>
    	<version>2.3.1</version>
    </dependency>
    

    Je me suis concentré uniquement sur le bureau. Création d’interfaces en tyracorn-core, et les a mis en œuvre dans tyracorn-desktop. J’ai également fait de nombreux tests unitaires et de petites applications POC, que je maintiens même maintenant. Le résultat…

    POC Android

    Écrivez une fois, exécutez partout. J’ai déjà entendu cela… Et oui, je voulais écrire l’application sur un ordinateur de bureau (avec des conditions préalables raisonnables à l’esprit) et pouvoir l’exécuter sur des téléphones Android. J’ai donc creusé dans une documentation officielle d’Android OpenGL ES.

    Il s’est avéré que la documentation est assez bonne. J’ai donc créé un projet dans Android Studio, inclus tyracorn-core en tant que dépendance et copié le code des exemples d’applications afin que je puisse les exécuter sur mon téléphone. Découvrez ensuite qu’il existe de légères différences dans les versions OpenGL, Java et, par exemple, dans la manière dont les ressources sont gérées dans ces systèmes. Il a donc fallu un peu d’abstraction et de brassage pour pouvoir exécuter le même code sur les deux systèmes. Ensuite, le résultat est comme ça.

    Maintenant, le POC fonctionnait. L’inconvénient même était que je devais continuer à copier des fichiers sur deux projets. La vie est dure );

    Parc d’exposition

    Vous vous souvenez de la configuration prévue du projet ? Chaque projet est développé sur un ordinateur de bureau en incluant la dépendance tyracorn-desktop. Cela permet un développement et un débogage super faciles uniquement à partir de l’IDE.

    Sur cette base, j’ai lancé le projet tyracorn-showpark et y ai porté plusieurs applications de test. Des transitions d’écran ont également été implémentées afin que les applications indépendantes à l’origine soient regroupées en une seule et qu’il soit possible de les basculer au moment de l’exécution. La version actuelle est disponible dans le Play Store.

    interface utilisateur

    Cela rejoint le point précédent. Des choses comme la transition d’écran, les écrans de chargement, les boutons, les manettes à l’écran, etc. Ce sont des pièces relativement petites, mais vous ne pourrez pas créer grand-chose sans elles.

    Chaîne d’outils

    Assez de copie de fichiers comme je l’ai fait pendant Android POC. Ajout du projet tyracorn-toolchain à la suite. En résumé, ce projet me permet de compiler des projets de bureau sur différentes plates-formes en exécutant simplement une seule commande. Il peut également déployer la version de développement sur le téléphone ou créer l’apk signé qui peut être téléchargé immédiatement sur le Play Store. Vous trouverez plus de détails sur son fonctionnement dans l’article Personal Mini Toolchains.

    Rendu de texte

    Découvrez qu’il est difficile de créer sans pouvoir restituer au moins un texte de base. La façon de faire est de créer un tilemap à partir de polices (utilisez un programme comme BMFont), puis de rendre les caractères sous forme de simples sprites. Bien qu’il y ait quelques problèmes avec la mise à l’échelle, je l’ai considéré comme suffisant pour le moment.

    Monde des acteurs

    Tous les meilleurs moteurs ont une structure où il y a une arborescence d’acteurs de gestion du monde. Et chaque acteur est un conteneur pour des composants tels que des modèles, des collisionneurs ou des scripts. J’ai donc voulu définir mes objets comme ça.

    Actor sphere = Actor.create(RandomStringUtils.randomAlphabetic(32)).
    		addComponent(TransformComponent.create().
    				move(Vec3.create(0, 8, 0))).
    		addComponent(ModelComponent.create().
    				setModelId(sphereModelId).
    				setTransform(Mat44.scale(1))).
    		addComponent(RigidBodyComponent.create().
    				setKinematic(false).
    				setMass(1).
    				setInertia(Inertias.sphere(1, 1)).
    				setVelocity(getRandomVelocity())).
    		addComponent(ColliderComponent.create().
    				setLayer(CollisionLayer.OBJECT).
    				setType(ColliderComponent.Type.SPHERE).
    				setRadius(1).
    				setMaterialId(objectColMatId));
    world.actors().add(ActorId.ROOT, sphere);
    

    Il a fallu un certain temps pour faire cette transition, mais trouvez cela assez puissant. Il est largement utilisé et voici un bel article à ce sujet.

    La physique

    Ouais, c’est juste un must. Et c’est amusant de jouer avec. J’ai aimé les articles écrits par Allen Chou. Je l’ai fait jusqu’à ce point.

    La gestion des ressources

    Le temps de chargement sur mobile est un problème. Au début, j’ai juste fait en sorte que les choses fonctionnent. Je ne me suis pas inquiété de la quantité de données extraites du stockage et n’a pas non plus été considéré comme des transformations en mémoire nécessaires. Le résultat… Écran de chargement de 2 minutes sur un téléphone mobile. Hmmm, ça vaut probablement l’optimisation.

    Pour cela, j’ai créé un type de fichier d’actif compressé (appelé fichiers TAP). Ils peuvent contenir n’importe quel type d’actif, et l’actif est prêt à être utilisé par le moteur sans aucune autre transformation. En prime, il prend en charge les versions de schéma, donc le format et les données peuvent évoluer dans le temps.

    Optimisations

    J’ai trouvé quelques autres éléments à optimiser à l’aide du profileur et de petites applications de test. La méthode pour ce faire est décrite dans l’article Test de performance au niveau unitaire.

    l’audio

    Java sur le bureau a des fonctions intégrées pour une lecture audio simple. Et je n’ai pas pu trouver la même chose sur Android. Nous avons donc écrit une classe utilitaire qui extrait les pistes audio des fichiers, les convertit au format de fichier PCM et les stocke dans un fichier TAP. Ensuite, implémenté le mixeur de son manuel séparément pour le bureau et Android. De cette façon, l’audio fonctionne de manière transparente dès qu’il est chargé à partir du fichier TAP. Peut-être qu’il y a un meilleur moyen, mais j’ai trouvé que c’était assez joli. Au fait, voici un bon article sur le mixage sonore.

    Tentative de jeu

    Ici, je pensais que j’avais fini. J’ai donc commencé à coder mon premier jeu. Il manquait encore une chose. C’était tout simplement trop difficile de tout faire dans le code (c’est possible, mais je suis paresseux salope). Je voulais donc rendre les choses plus faciles.

    Éditeur

    Cela manquait un peu. J’en ai donc créé un qui me permet de définir des préfabriqués, puis de les placer dans des scènes. En outre, un moyen de référencer les scripts a été ajouté afin que les préfabriqués soient connectés au code. Pour ce faire, j’ai dû améliorer considérablement l’interface utilisateur. Et tadaaaa.

    Enfin le jeu

    Yai, maintenant tout est prêt pour la création du jeu. Alors allez-y et profitez de Snake. J’espère pouvoir en rajouter au fil du temps.

    Mes plats à emporter

    Heureux d’avoir fait cette expérience. J’ai beaucoup appris et utilisé les connaissances dans mes activités commerciales (même cela n’a rien à voir avec les jeux).

    De plus, j’ai maintenant ma propre propriété intellectuelle qui est prête à évoluer et à grandir. C’est plutôt cool!

    S’il vous plaît, mettez-moi un commentaire sur ce que vous aimeriez voir comme prochaine étape.

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.