Outils pour utilisateurs

Outils du site


dindomoteur_creation_du_joueur

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_creation_du_joueur [2022/03/27 13:16] Simon Deplatdindomoteur_creation_du_joueur [2022/03/27 19:24] (Version actuelle) Simon Deplat
Ligne 64: Ligne 64:
  
 ====Implémentation de la gravité==== ====Implémentation de la gravité====
 +
 +**[ NOTE ] : Comme discuté [[https://regakakobigman.netlify.app/godot/2019/10/09/how-to-use-delta.html|ici]], la gestion actuelle des accélérations est mal implémentée car elle n'est pas multipliée par delta.**
  
 Le joueur aura donc une masse et sera affecté par la gravité : Le joueur aura donc une masse et sera affecté par la gravité :
Ligne 476: Ligne 478:
 J'ai activé **la //lecture automatique au chargement// de l'animation //repos//**, et activé **la //lecture en boucle// de l'animation //marche//**. J'ai activé **la //lecture automatique au chargement// de l'animation //repos//**, et activé **la //lecture en boucle// de l'animation //marche//**.
  
-J'ai dû rajouter un nœud //RayCast2D// pour que l'animation du saut se fasse correctement. Ma première idée était d'utiliser //is_on_floor()// pour détecter si le personnage était en train de sauter. Cependant, **lorsque le //KinematicBody2D// glisse le long d'une pente, il lui arrive de se décoller légèrement lorsque que la pente ascendante passe sur un plan horizontal**. Dans ce cas, //is_on_floor()// passe à //false// et déclenche l'animation, ce qui n'est pas joli à voir. À la place, j'ai mis un //RayCast2D// sous les pieds du //Joueur//, dont la propriété //Cast To// a été réglée à Vector2( 0, -20 ). J'ai coché le paramètre //enabled// pour l'activer, et changer le //masque de collision//.+**J'ai dû rajouter un nœud //RayCast2D// pour que l'animation du saut se fasse correctement.** 
 + 
 +Ma première idée était d'utiliser //is_on_floor()// pour détecter si le personnage était en train de sauter. Cependant, **lorsque le //KinematicBody2D// glisse le long d'une pente, il lui arrive de se décoller légèrement lorsque que la pente ascendante passe sur un plan horizontal**. Dans ce cas, //is_on_floor()// passe à //false// et déclenche l'animation, ce qui n'est pas joli à voir. 
 + 
 +À la place, j'ai mis un //RayCast2D// sous les pieds du //Joueur//, dont la propriété //Cast To// a été réglée à Vector2( 0, 20 ). J'ai coché le paramètre //enabled// pour l'activer, et changer le //masque de collision//. 
 + 
 +Cependant, cela pose le problème inverse lorsque que le personnage passe une plate-forme à sens unique en sautant. Alors qu'il est sensé être en saut, le //RayCast2D// détecte la plate-forme et lance l'animation. Il faut donc, pendant le saut, désactiver le //RayCast2D//.
  
 Le tout est ensuite appelé au sein d'une fonction dédiée : Le tout est ensuite appelé au sein d'une fonction dédiée :
Ligne 487: Ligne 495:
 [...] [...]
  
 +# Appui sur le bouton de saut
 +func entreeSaut():
 + # Mécanisme de saut
 + if is_on_floor():
 + if not $RayCast2D.enabled:
 + $RayCast2D.set_enabled( true )
 + if Input.is_action_just_pressed("espace"):
 + _velocite.y -= _forceSaut
 + _saute = true
 + $RayCast2D.set_enabled( false )
 +
 +
 +[...]
 # Animation du personnage : # Animation du personnage :
 func animer(): func animer():
  # Vérifier si le personnage est au sol :  # Vérifier si le personnage est au sol :
- if $RayCast2D.is_colliding(): + if $RayCast2D.enabled: 
- # S'il bouge + if $RayCast2D.is_colliding(): 
- if _velocite.x != 0: + # S'il bouge 
- $AnimationPlayer.play("marche"+ if _velocite.x != 0: 
- # Sinon + $AnimationPlayer.play("marche"
- else: + # Sinon 
- $AnimationPlayer.play("repos")+ else: 
 + $AnimationPlayer.play("repos")
  else:  else:
  $AnimationPlayer.play("saut")  $AnimationPlayer.play("saut")
Ligne 513: Ligne 535:
 extends KinematicBody2D extends KinematicBody2D
  
-var _typeEntree = "manette"+var _typeEntree = "clavier"
 var _zoneMorte = 0.3 var _zoneMorte = 0.3
  
Ligne 572: Ligne 594:
  # Mécanisme de saut  # Mécanisme de saut
  if is_on_floor():  if is_on_floor():
 + if not $RayCast2D.enabled:
 + $RayCast2D.set_enabled( true )
  if Input.is_action_just_pressed("espace"):  if Input.is_action_just_pressed("espace"):
  _velocite.y -= _forceSaut  _velocite.y -= _forceSaut
  _saute = true  _saute = true
 + $RayCast2D.set_enabled( false )
  
 # Gestion de l'interruption du saut # Gestion de l'interruption du saut
Ligne 647: Ligne 672:
 func animer(): func animer():
  # Vérifier si le personnage est au sol :  # Vérifier si le personnage est au sol :
- if $RayCast2D.is_colliding(): + if $RayCast2D.enabled: 
- # S'il bouge + if $RayCast2D.is_colliding(): 
- if _velocite.x != 0: + # S'il bouge 
- $AnimationPlayer.play("marche"+ if _velocite.x != 0: 
- # Sinon + $AnimationPlayer.play("marche"
- else: + # Sinon 
- $AnimationPlayer.play("repos")+ else: 
 + $AnimationPlayer.play("repos")
  else:  else:
  $AnimationPlayer.play("saut")  $AnimationPlayer.play("saut")
- 
 </code> </code>
  
Ligne 673: Ligne 698:
 Notez que je n'ai pas renommé les noeuds (sauf le parent) pour que vous les identifiiez plus facilement ici, mais qu'il est tout-de-même conseillé de les renommer lors de ses projets propres. Notez que je n'ai pas renommé les noeuds (sauf le parent) pour que vous les identifiiez plus facilement ici, mais qu'il est tout-de-même conseillé de les renommer lors de ses projets propres.
  
-Je créé par ailleurs **une copie autonome de ce //Joueur// dans le dossier //src/JoueurSimple///**, en stockant l'ensemble des ressources à l'intérieur même du dossier afin de faciliter l'importation de la scène dans d'autres projets. La dépendance à //Global// n'étant pas forte, le seul paramétrage à faire est d'associer les bonnes entrées utilisateurs dans les //Paramètres du projet//.+Je créé par ailleurs **une copie autonome de ce //Joueur// dans le dossier //src/JoueurSimple/// **, en stockant l'ensemble des ressources à l'intérieur même du dossier afin de faciliter l'importation de la scène dans d'autres projets. La dépendance à //Global// n'étant pas forte, le seul paramétrage à faire est d'associer les bonnes entrées utilisateurs dans les //Paramètres du projet//.
 {{tag>godot dindomoteur jeu vidéo}} {{tag>godot dindomoteur jeu vidéo}}
dindomoteur_creation_du_joueur.1648386974.txt.gz · Dernière modification : 2022/03/27 13:16 de Simon Deplat