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 15:57] – Simon Deplat | dindomoteur_portail_du_moteur_de_metroidvania_orleanais [2022/03/27 13:42] (Version actuelle) – Simon Deplat | ||
---|---|---|---|
Ligne 92: | 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 132: | 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 // | ||
+ | |||
+ | Pour éviter de rendre les nœuds qui utilisent cette scène dépendants de celle-ci, on pourra **vérifier au préalable qu' | ||
+ | |||
+ | < | ||
+ | _gravite = 50 | ||
+ | |||
+ | [...] | ||
+ | |||
+ | func _ready(): | ||
+ | if get_tree().root.has_node(" | ||
+ | _gravite = Global.gravite | ||
+ | </ | ||
+ | |||
+ | Ci-dessus, vous pouvez voir qu'il y a déjà une valeur assignée par défaut à // | ||
===Ajout du paramètre de gravité=== | ===Ajout du paramètre de gravité=== | ||
- | Au lieu d' | + | Au lieu d' |
< | < | ||
... | ... | ||
- | var gravite = 100 | + | var gravite = 50 |
... | ... | ||
func _ready(): | func _ready(): | ||
Ligne 150: | Ligne 179: | ||
- | ===Script actuel du nœud global ( global.gd )=== | + | ====Script actuel du nœud global ( global.gd )==== |
< | < | ||
extends Node | extends Node | ||
- | var gravite = 100 | + | var typeEntree = " |
+ | var zoneMorte = 0.3 | ||
+ | |||
+ | var gravite = 50 | ||
func _ready(): | func _ready(): | ||
ProjectSettings.set_setting( " | ProjectSettings.set_setting( " | ||
+ | |||
</ | </ | ||
Ligne 178: | Ligne 212: | ||
=====Sous-articles du moteur===== | =====Sous-articles du moteur===== | ||
- | Cette section présente les différents | + | Cette section présente les sous-articles du projet, qui documentent indépendamment les différents sous-modules du moteur : |
- | + | ||
- | **[EN CONSTRUCTION & NETTOYAGE]** | + | |
- | + | ||
- | =====Mouvements latéraux===== | + | |
- | Après cela, **nous pouvons déplacer le personnage latéralement** grâce au clavier : | + | |
- | + | ||
- | // | + | |
- | < | + | |
- | class_name Personnage | + | |
- | extends KinematicBody2D | + | |
- | + | ||
- | var direction = Vector2.ZERO | + | |
- | + | ||
- | export var masse = 60 | + | |
- | 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' | + | |
- | const DETECTION_DISTANCE_SOL = 20.0 | + | |
- | + | ||
- | 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 KinematicBody2D | + | |
- | + | ||
- | var direction = Vector2.ZERO | + | |
- | + | ||
- | export var masse = 350 | + | |
- | export var vitesse = 300 | + | |
- | export var forceSaut = 200 | + | |
- | + | ||
- | var forceSautActuelle = 0 | + | |
- | + | ||
- | 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' | + | |
- | const DETECTION_DISTANCE_SOL = 20.0 | + | |
- | + | ||
- | onready var detectionSol = $detectionSol | + | |
- | + | ||
- | func _ready(): | + | |
- | pass | + | |
- | + | ||
- | func _physics_process( _delta ): | + | |
- | 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' | + | |
- | 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 | + | |
- | </ | + | |
- | 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.1647791849.txt.gz · Dernière modification : 2022/03/20 15:57 de Simon Deplat