Outils pour utilisateurs

Outils du site


dindomoteur_mise_en_place_un_moteur_de_jeu_video

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dindomoteur_mise_en_place_un_moteur_de_jeu_video [2022/03/13 14:52] Simon Deplatdindomoteur_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'utilise régulièrement **le moteur de jeu vidéo libre [[https://godotengine.org/|Godot]]**. 
- 
-Celui-ci a accompagné ma découverte du développement informatique, et **il prend de l'ampleur**, rejoignant [[https://www.blender.org/|Blender]] dans le registre des outils libres qui agrègent assez de contributeurs et de d'utilisateurs pour devenir **des logiciels équivalents aux alternatives propriétaires**. 
- 
-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'appuient en général pas seulement sur un moteur généraliste**. Ces moteurs, comme //Godot//, //Unity//, //Unreal Engine// ou encore //RPG Maker//, sont **des frameworks dédiés à la création de jeu vidéo mettant en place des outils graphiques et un langage de programmation qui facilite la mise-en-place de certains outils nécessaires au développement du logiciel**. 
- 
-**Si ce sujet vous intéresse, vous devriez essayer de coder un petit jeu vidéo via la librairie python [[https://fr.wikipedia.org/wiki/Pygame|Pygame]], puis en développer un second en utilisant Godot.** Vous vous rendrez alors compte qu'**un grand nombre des fonctionnalités à recoder soi-même en //Pygame// (par exemple les //hitbox//) sont maintenant pleinement intégrés dans //Godot//**, qui, de surcroît, intègre un framework graphique. 
- 
-Ces moteurs généralistes, donc, mettent en place l'ensemble des outils nécessaires à coder rapidement un jeu vidéo, mais **leur aspect généraliste ne les rend pas capables de créer autre chose qu'un clone de jeu vidéo existant**. Ils agrègent d'une certaine manière les algorithmes redondants du monde du jeu vidéo une fois qu'un nombre assez grand de jeux vidéos les proposent. 
- 
-Par exemple, **le jeu [[https://fr.wikipedia.org/wiki/Wolfenstein_3D|Wolfenstein 3D]] était le premier jeu vidéo en trois dimensions**. À son époque, ce sont les développeurs qui ont codé le moteur de 3D qu'il utilise, puis, devant le succès et la prouesse de l'algorithme, de nombreux autres développeurs l'ont copié. **Maintenant, un moteur comme //Godot// intègre nativement cet algorithme.** 
- 
-Or, ce qui fait le charme de nombreux jeux, c'est le caractère unique du //gameplay// qu'ils proposent. Ils ne peuvent se contenter d'utiliser le moteur généraliste : **il est nécessaire de recréer un sous moteur spécialisé à l'aide du moteur généraliste**. 
- 
-À titre d'exemple, on peut penser à l'algorithme de téléportation du jeu [[https://fr.wikipedia.org/wiki/Portal_(jeu_vid%C3%A9o)|Portal]], le système d'énigme de [[https://fr.wikipedia.org/wiki/Baba_Is_You|Baba Is You]], ou encore l'environnement modulable de [[https://fr.wikipedia.org/wiki/Minecraft|Minecraft]]. 
- 
-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'utilisation des menus comme espaces de jeu** et non plus comme simple espace de documentation et de paramétrages dans les //RPG//, par exemple dans les premiers [[https://fr.wikipedia.org/wiki/Pok%C3%A9mon_Rouge_et_Bleu|Pokémon]], **est déjà une mise-en-place d'un //gameplay// particulier au sein d'une architecture classique**. 
- 
-=====Objectif===== 
-**Mon objectif est de construire, de manière incrémentale, un moteur de jeu vidéo libre et documenté en français qui permette de cloner des jeux d'aventures de type //[[https://fr.wikipedia.org/wiki/Metroidvania|metroidvania]]//**, comme [[https://fr.wikipedia.org/wiki/Hollow_Knight|Hollow Knight]] ou [[https://fr.wikipedia.org/wiki/Dead_Cells|Dead Cells]]. 
- 
-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 //gameplay// en ajoutant du code dédié**. 
- 
-Une fois le moteur en place, il devient possible de **le mettre à disposition de //designer// et d'artistes pour réaliser des versions concrètes de jeux vidéos à chaque point d'étape**. Dans cette optique, chaque jeu vidéo associé au moteur correspond à une spécialisation du moteur. 
- 
- 
-=====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é //gdscript//**, basé sur la syntaxe python. Il reste également possible de coder en //C++// directement. 
- 
-**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 : //sprites//, animations, gestion de collision, parallaxes, entrées utilisateurs, etc... Grâce au système d'héritage, il est alors possible de **créer et instancier ses propres objets, qui, dans la sémantique propre à **Godot**, sont nommés des //scènes//**. 
- 
-Dans la philosophie du moteur, **une //scène// correspond en général à un objet (au sens humain) particulier**. Un exemple typique est l'idée qu'une //scène// Village contiendra une //scène// Maison, qui contiendra une //scène// Table, etc. 
- 
-**Concernant la gestion des coordonnées, c'est le système vectoriel qui est utilisé**, comme à l'accoutumée dans les jeux vidéos. 
- 
-**Les objets étant organisés selon un système d'arbre**, les coordonnées d'une scène sont modifiées par l'ensemble des parents ce qui, dans l'exemple précédent, permet de bouger la Table en même temps que la Maison. 
- 
-Pour plus d'infos sur Godot, [[https://docs.godotengine.org/en/stable/|RTFM]]. 
- 
- 
-=====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)// qui servira de base de travail pour le développement du sous-moteur. 
- 
-**Celui-ci intègre déjà les fonctionnalités de base d'un //metroidvania// très simple** : personnage contrôlable, plateformes mouvantes, prototype d'AI, objets à ramasser... 
- 
-Nous allons donc commencer par décortiquer cet exemple et en reconstruire les fonctionnalités principales dans un nouveau projet. 
dindomoteur_mise_en_place_un_moteur_de_jeu_video.1647183130.txt.gz · Dernière modification : 2022/03/13 14:52 de Simon Deplat