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:17] 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>
  
dindomoteur_creation_du_joueur.1648387044.txt.gz · Dernière modification : 2022/03/27 13:17 de Simon Deplat