dindomoteur_mise_en_place_un_moteur_de_jeu_video
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
dindomoteur_mise_en_place_un_moteur_de_jeu_video [2022/03/13 16:07] – Simon Deplat | dindomoteur_mise_en_place_un_moteur_de_jeu_video [2022/03/20 11:11] (Version actuelle) – supprimée Simon Deplat | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== DindoMoteur : Mise en place d'un moteur de jeu vidéo ====== | ||
- | =====Contexte===== | ||
- | Cela fait maintenant 5 ans que j' | ||
- | |||
- | Celui-ci a accompagné ma découverte du développement informatique, | ||
- | |||
- | Au cours de mes recherches, j'ai fini par me rendre compte que **la plupart des jeux vidéos ayant eu un impact culturel ne s' | ||
- | |||
- | **Si ce sujet vous intéresse, vous devriez essayer de coder un petit jeu vidéo via la librairie python [[https:// | ||
- | |||
- | Ces moteurs généralistes, | ||
- | |||
- | Par exemple, **le jeu [[https:// | ||
- | |||
- | Or, ce qui fait le charme de nombreux jeux, c'est le caractère unique du // | ||
- | |||
- | À titre d' | ||
- | |||
- | En réalité, ces exemples sont des exemples assez avancés qui mettent facilement en valeur la nécessité de respécialiser un jeu par rapport à un concept généraliste. **L' | ||
- | |||
- | =====Objectif===== | ||
- | **Mon objectif est de construire, de manière incrémentale, | ||
- | |||
- | En prenant soin de documenter le projet, **le but est de pouvoir disposer d'un moteur intégrant déjà les paramètres classiques, modifiables aisément** (si possible via des interfaces graphiques). Une fois ce sous-moteur généraliste en place, le but est de **pouvoir facilement re-spécialiser le // | ||
- | |||
- | Une fois le moteur en place, il devient possible de **le mettre à disposition de // | ||
- | |||
- | |||
- | =====Godot : kézako ?===== | ||
- | **Godot est donc un moteur de jeu vidéo libre.** | ||
- | |||
- | Il intègre à la fois **une interface graphique de programmation et un langage nommé // | ||
- | |||
- | **Le langage manipulé est orienté objet**, et c'est ce qui fait la force de Godot : il intègre de nombreuses classes communément utilisées dans la programmation : // | ||
- | |||
- | Dans la philosophie du moteur, **une //scène// correspond en général à un objet (au sens humain) particulier**. Un exemple typique est l' | ||
- | |||
- | **Concernant la gestion des coordonnées, | ||
- | |||
- | **Les objets étant organisés selon un système d' | ||
- | |||
- | Pour plus d' | ||
- | |||
- | |||
- | =====Base de travail===== | ||
- | **Godot intègre une librairie de ressources (//Asset Library//) qui permet de voir comment utiliser le moteur de manière efficiente à l'aide de projets didactiques.** | ||
- | |||
- | Dans notre cas, c'est le //2D Platformer Demo (KinematicBody)// | ||
- | |||
- | **Celui-ci intègre déjà les fonctionnalités de base d'un // | ||
- | |||
- | Nous allons donc commencer par décortiquer cet exemple et en reconstruire les fonctionnalités principales dans un nouveau projet. | ||
- | |||
- | |||
- | =====Organisation du répertoire===== | ||
- | Dans sa documentation, | ||
- | |||
- | Un des problèmes inhérents à l' | ||
- | |||
- | Également, il devient difficile de se retrouver dans l' | ||
- | |||
- | Dans le cas du // | ||
- | |||
- | Comme évoqué précédemment, | ||
- | |||
- | Nous garderons le même principe d' | ||
- | |||
- | =====Mise en place des systèmes globaux===== | ||
- | Avant même de créer la première scène, il s'agit de mettre en place certains mécanismes généraux pour le moteur de jeu. Cela concerne : | ||
- | * Le nom des entrées utilisateurs et les boutons qui y sont associés. | ||
- | * La résolution de base ( 1920 x 1080 ) et le système de mise à l' | ||
- | * La création d'un script global pour centraliser un certain nombre de paramètres de jeu (en faisant attention au risque d' | ||
- | |||
- | =====Mise en place des entrées utilisateurs===== | ||
- | Le moteur étant particulièrement chauvin, je commence par utiliser l' | ||
- | |||
- | * q : " | ||
- | * d : " | ||
- | * s : " | ||
- | * z : " | ||
- | * espace : " | ||
- | |||
- | Même s'il est conseillé d' | ||
- | |||
- | {{ :: | ||
- | |||
- | =====Paramétrage de la fenêtre===== | ||
- | J' | ||
- | |||
- | De manière générale, les jeux sont maintenant affichés en plein écran avec une résolution de 1920 par 1080 pixels. Dans notre cas nous voulons néanmoins rester sur un affichage fenêtré afin de faciliter le développement (même si cela peut permettre de ne pas oublier d' | ||
- | |||
- | Pour les questions de redimensionnement, | ||
- | * Mode : 2d | ||
- | * Aspect : keep | ||
- | |||
- | Il faudra peut-être revoir ultérieurement ces réglages. | ||
- | |||
- | =====Création de la scène Main===== | ||
- | Afin de pouvoir tester les réglages graphiques, il est nécessaire d' | ||
- | |||
- | Je créé donc une scène Main.tscn dans le répertoire // | ||
- | |||
- | Afin de rester polyvalent, cette scène sera de type //Node//, qui est la //classe// maîtresse dans //Godot//. | ||
- | |||
- | =====Mise en place d'un nœud global===== | ||
- | Je vais maintenant utiliser le système d' | ||
- | |||
- | Il est possible dans Godot d' | ||
- | |||
- | Ce nœud global sera chargé automatiquement à chaque lancement du programme ce qui lui permettra de centraliser l' | ||
- | |||
- | Pour autant, il serait préférable que chaque scène soit dotée d'un mécanisme tel que : | ||
- | * si la scène est lancée seule, un mécanisme est mis-en-place pour bloquer les méthodes nécessitant l' | ||
- | * si le nœud global est activé, l' | ||
- | * si la ressource externe est chargée également, celle-ci a la priorité sur les méthodes décrite ci-dessus. | ||
- | |||
- | Pour mettre en place le noeud global, je créé un script global.gd situé dans le répertoire src/Main/ puis utilise le menu Projet > Paramètres du projet... > AutoLoad pour lui assigner le nom Global. | ||
- | |||
- | Le mot Global permet maintenant d'y accéder depuis n' | ||
- | |||
- | |||
- | =====Création d'un joueur et d'une plate-forme===== | ||
- | Je souhaite dans un premier temps avoir un simple joueur contrôlable ainsi qu'une plate-forme sur lequel celui-ci puisse se mouvoir. | ||
- | |||
- | En un premier temps, je créé deux répertoire dans src/ : Joueur/ et Niveau/ . | ||
- | |||
- | Je remarque que dans Platformer, il y a un répertoire Platform/ dédié aux plate-formes. Nous verrons en temps voulu si c'est pertinent, commençons simplement pour l' | ||
- | |||
- | Pour l' | ||
- | |||
- | À ce stade, il est importer de choisir une unité de référence pour plus tard : nous serons amenés à utiliser des // | ||
- | |||
- | Dans notre cas, la plate-forme fera 512 x 64 pixels. | ||
- | |||
- | Pour l' | ||
- | |||
- | Voici les deux //sprites// utilisés pour l' | ||
- | {{ : | ||
- | {{ : | ||
- | |||
- | Une fois les //sprites// réalisés, je crée donc les scènes associées : | ||
- | * pour le Joueur, un //Kinematic Body 2D// . | ||
- | * pour la plate-forme, | ||
- | |||
- | De manière intuitive, chacun d' | ||
- | |||
- | Ensuite, je les ajoute au nœud Main en les instanciant. Ils ne bougent pas, mais ils apparaissent à l' | ||
- | {{ :: |
dindomoteur_mise_en_place_un_moteur_de_jeu_video.1647187672.txt.gz · Dernière modification : 2022/03/13 16:07 de Simon Deplat