dindomoteur_portail_du_moteur_de_metroidvania_orleanais
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_portail_du_moteur_de_metroidvania_orleanais [2022/03/20 11:21] – Simon Deplat | dindomoteur_portail_du_moteur_de_metroidvania_orleanais [2022/03/27 13:42] (Version actuelle) – Simon Deplat | ||
---|---|---|---|
Ligne 67: | Ligne 67: | ||
Cette section discute des réglages généraux du moteur, qui sont de fait partagés par l' | Cette section discute des réglages généraux du moteur, qui sont de fait partagés par l' | ||
Pour des raisons de clarté, ces sous-modules sont ensuite discutés dans des pages dédiées du wiki. | Pour des raisons de clarté, ces sous-modules sont ensuite discutés dans des pages dédiées du wiki. | ||
+ | |||
+ | La version de Godot avec laquelle est développée le moteur est la 3.4.3 . | ||
====Organisation du répertoire==== | ====Organisation du répertoire==== | ||
Ligne 90: | Ligne 92: | ||
Le moteur étant particulièrement chauvin, je commence par **utiliser l' | Le moteur étant particulièrement chauvin, je commence par **utiliser l' | ||
- | * q : " | + | * " |
- | * d : " | + | * q |
- | * s : " | + | * Left Stick Left |
- | * z : " | + | * " |
- | * espace | + | * d |
+ | * Left Stick Right | ||
+ | * " | ||
+ | * s | ||
+ | * Left Stick Down | ||
+ | * " | ||
+ | * z | ||
+ | * Left Stick Up | ||
+ | * "espace" | ||
+ | * espace | ||
+ | * Xbox A | ||
+ | * "interagir" | ||
+ | * E | ||
+ | * Xbox X | ||
Même s'il est **conseillé d' | Même s'il est **conseillé d' | ||
Ligne 130: | Ligne 145: | ||
* si la ressource externe est chargée également, celle-ci a la priorité sur les méthodes décrite ci-dessus. | * 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 nœud global, je créé un script global.gd | + | Pour mettre en place le nœud global, je créé |
**Le mot //Global// permet maintenant d'y accéder depuis n' | **Le mot //Global// permet maintenant d'y accéder depuis n' | ||
+ | Cette scène permettra notamment de **mettre en place un //Affichage Tête Haute// (//ATH//)** à l'aide d'un noeud // | ||
- | ====Définition d'une unité | + | Pour éviter |
- | **Certaines classes de Godot ont besoin d'une unité spatiale de référence** pour fonctionner, | + | |
- | + | ||
- | De manière presque arbitraire, **cette unité | + | |
- | + | ||
- | Veuillez noter que **la possibilité de zoomer sur des éléments du jeu via l' | + | |
- | + | ||
- | =====Sous-articles du moteur===== | + | |
- | Cette section présente les différents sous-articles du projet, qui documentent indépendamment les différents sous-modules du moteur : | + | |
- | + | ||
- | + | ||
- | =====Mise-en-place des collisions===== | + | |
- | On commence par modifier les masques de collision pour faciliter le travail : | + | |
- | | + | |
- | | + | |
- | * 3 : objets | + | |
- | * 4 : terrain | + | |
- | * 5 : terrain2 | + | |
- | + | ||
- | **On modifie les nœuds de collision afin qu'ils correspondent.** Pour l' | + | |
- | + | ||
- | Dans les versions précédente de //Godot//, le // | + | |
- | + | ||
- | Nous commençons par mettre en place un système similaire, en créant un répertoire // | + | |
- | + | ||
- | Après quelques recherches, voici [[https:// | + | |
- | + | ||
- | + | ||
- | =====C' | + | |
- | À ce stade, nous avons donc le script // | + | |
< | < | ||
- | class_name Personnage | + | _gravite = 50 |
- | extends KinematicBody2D | + | |
- | export var masse = 60 | + | [...] |
- | onready var gravite = ProjectSettings.get( " | + | |
- | const NORMAL_SOL = Vector2.UP | + | func _ready(): |
- | + | if get_tree().root.has_node(" | |
- | var _velocite = Vector2.ZERO | + | _gravite = Global.gravite |
- | + | ||
- | # la fonction _physics_process héritée est appelée | + | |
- | # après la fonction _physics_process parente | + | |
- | func _physics_process( delta ): | + | |
- | _velocite.y += gravite | + | |
</ | </ | ||
- | Ainsi que le script | + | Ci-dessus, vous pouvez voir qu'il y a déjà une valeur assignée par défaut à // |
- | < | + | ===Ajout du paramètre de gravité=== |
- | class_name Joueur | + | |
- | extends Personnage | + | |
- | const DETECTION_DISTANCE_SOL = 20.0 | + | Au lieu d'utiliser l' |
- | + | ||
- | func _physics_process( _delta ): | + | |
- | var accrocheVectorielle = Vector2.DOWN * DETECTION_DISTANCE_SOL | + | |
- | + | ||
- | _velocite = move_and_slide_with_snap( | + | |
- | _velocite, | + | |
- | accrocheVectorielle, | + | |
- | NORMAL_SOL, | + | |
- | true, # Ne glisse pas sur le sol en cas d'inactivité ? | + | |
- | 4, # Nombre | + | |
- | 0.9, # Angle maximum du sol ( en radians ) | + | |
- | false # Inertie infinie ? | + | |
- | ) | + | |
- | </ | + | |
- | + | ||
- | Le personnage, emporté par son propre poids, est attiré vers le sol et s'y accroche à son contact. | + | |
- | + | ||
- | =====Mouvements latéraux===== | + | |
- | Après cela, **nous pouvons déplacer | + | |
- | + | ||
- | //Personnage.gd// | + | |
< | < | ||
- | class_name Personnage | + | ... |
- | extends KinematicBody2D | + | var gravite |
- | + | ... | |
- | var direction | + | func _ready(): |
- | + | ... | |
- | export var masse = 60 | + | ProjectSettings.set_setting( " |
- | export var vitesse = 300 | + | ... |
- | + | ||
- | onready var gravite = ProjectSettings.get( " | + | |
- | + | ||
- | const NORMAL_SOL = Vector2.UP | + | |
- | + | ||
- | var _velocite = Vector2.ZERO | + | |
- | + | ||
- | # la fonction _physics_process héritée est appelée | + | |
- | # après la fonction _physics_process parente | + | |
- | func _physics_process( delta ): | + | |
- | _velocite.y += gravite * masse * delta | + | |
</ | </ | ||
- | // | ||
- | < | ||
- | class_name Joueur | ||
- | extends Personnage | ||
- | # Distance d' | + | ====Script actuel du nœud global ( global.gd )==== |
- | const DETECTION_DISTANCE_SOL | + | |
- | func _physics_process( _delta ): | ||
- | var accrocheVectorielle = Vector2.DOWN * DETECTION_DISTANCE_SOL | ||
- | |||
- | bouge() | ||
- | |||
- | _velocite.x = direction.x * vitesse | ||
- | |||
- | _velocite = move_and_slide_with_snap( | ||
- | _velocite, | ||
- | accrocheVectorielle, | ||
- | NORMAL_SOL, | ||
- | true, # Ne glisse pas sur le sol en cas d' | ||
- | 4, # Nombre de collisions traitées par cycle | ||
- | 0.9, # Angle maximum du sol ( en radians ) | ||
- | false # Inertie infinie ? | ||
- | ) | ||
- | |||
- | func bouge(): | ||
- | if Input.is_action_just_pressed(" | ||
- | direction.x = -1 | ||
- | elif Input.is_action_just_pressed(" | ||
- | direction.x = 1 | ||
- | |||
- | if Input.is_action_just_released(" | ||
- | if not Input.is_action_pressed(" | ||
- | direction.x = 0 | ||
- | else: | ||
- | direction.x = 1 | ||
- | |||
- | if Input.is_action_just_released(" | ||
- | if not Input.is_action_pressed(" | ||
- | direction.x = 0 | ||
- | else: | ||
- | direction.x = -1 | ||
- | </ | ||
- | |||
- | **Il n'y a pas d' | ||
- | |||
- | =====Système de saut===== | ||
- | On peut maintenant **le faire sauter** de plate-forme en plate-forme grâce à la touche //espace// : | ||
- | |||
- | // | ||
< | < | ||
- | class_name Personnage | + | extends |
- | extends | + | |
- | var direction | + | var typeEntree |
+ | var zoneMorte = 0.3 | ||
- | export | + | var gravite |
- | export var vitesse = 300 | + | |
- | export var forceSaut = 200 | + | |
- | var forceSautActuelle = 0 | + | func _ready(): |
+ | ProjectSettings.set_setting( " | ||
- | onready var gravite = ProjectSettings.get( " | ||
- | |||
- | const NORMAL_SOL = Vector2.UP | ||
- | |||
- | var _velocite = Vector2.ZERO | ||
- | |||
- | # la fonction _physics_process héritée est appelée | ||
- | # après la fonction _physics_process parente | ||
- | func _physics_process( delta ): | ||
- | _velocite.y += gravite * masse * delta | ||
</ | </ | ||
- | //Joueur.gd// | + | ====Définition d'une unité de référence==== |
- | < | + | **Certaines classes de Godot ont besoin d'une unité spatiale de référence** pour fonctionner, |
- | class_name Joueur | + | |
- | extends Personnage | + | |
- | # Distance d' | + | De manière presque arbitraire, **cette unité |
- | const DETECTION_DISTANCE_SOL = 20.0 | + | |
- | onready var detectionSol = $detectionSol | + | Veuillez noter que **la possibilité de zoomer sur des éléments du jeu via l' |
- | func _ready(): | + | ====Mise-en-place des collisions==== |
- | pass | + | **Les masques de collision sont redéfinis** pour faciliter le travail, dans les // |
+ | * 1 : joueur | ||
+ | * 2 : ennemis | ||
+ | * 3 : objets | ||
+ | * 4 : terrain | ||
+ | * 5 : terrain2 | ||
- | func _physics_process( _delta ): | + | À ce moment de la rédaction de la documentation, |
- | var accrocheVectorielle = Vector2.DOWN * DETECTION_DISTANCE_SOL | + | |
- | var surLeSol = detectionSol.is_colliding() | + | |
- | + | ||
- | bouge() | + | |
- | + | ||
- | if surLeSol: | + | |
- | if Input.is_action_just_pressed(" | + | |
- | forceSautActuelle = forceSaut | + | |
- | + | ||
- | _velocite.y -= forceSautActuelle | + | |
- | if forceSautActuelle > 0: | + | |
- | forceSautActuelle = forceSautActuelle - gravite | + | |
- | if forceSautActuelle < 0: | + | |
- | forceSautActuelle = 0 | + | |
- | + | ||
- | _velocite.x = direction.x * vitesse | + | |
- | + | ||
- | _velocite = move_and_slide_with_snap( | + | |
- | _velocite, | + | |
- | Vector2.ZERO, | + | |
- | NORMAL_SOL, | + | |
- | true, # Ne glisse pas sur le sol en cas d'inactivité ? | + | |
- | 4, # Nombre de collisions traitées par cycle | + | |
- | 0.9, # Angle maximum | + | |
- | false # Inertie infinie ? | + | |
- | ) | + | |
- | func bouge(): | + | =====Sous-articles du moteur===== |
- | if Input.is_action_just_pressed(" | + | Cette section présente les sous-articles du projet, qui documentent indépendamment les différents sous-modules du moteur |
- | direction.x | + | |
- | elif Input.is_action_just_pressed(" | + | |
- | direction.x | + | |
- | + | ||
- | if Input.is_action_just_released(" | + | |
- | if not Input.is_action_pressed(" | + | |
- | direction.x | + | |
- | else: | + | |
- | direction.x | + | |
- | + | ||
- | if Input.is_action_just_released(" | + | |
- | if not Input.is_action_pressed(" | + | |
- | direction.x | + | |
- | else: | + | |
- | direction.x = -1 | + | |
- | </ | + | |
- | Avec cette version, il est possible de modifier sa direction pendant le saut, ce qui n'est pas réaliste mais plutôt agréable à jouer ! Pour changer le dynamisme des sauts, il faut modifier intelligemment la masse du Joueur | + | [[https:// |
{{tag> | {{tag> |
dindomoteur_portail_du_moteur_de_metroidvania_orleanais.1647775268.txt.gz · Dernière modification : 2022/03/20 11:21 de Simon Deplat