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
Dernière révisionLes deux révisions suivantes
dindomoteur_creation_du_joueur [2022/03/27 13:16] Simon Deplatdindomoteur_creation_du_joueur [2022/03/27 14:25] Simon Deplat
Ligne 476: Ligne 476:
 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 493:
 [...] [...]
  
 +# 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 533:
 extends KinematicBody2D extends KinematicBody2D
  
-var _typeEntree = "manette"+var _typeEntree = "clavier"
 var _zoneMorte = 0.3 var _zoneMorte = 0.3
  
Ligne 572: Ligne 592:
  # 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 670:
 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 696:
 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.txt · Dernière modification : 2022/03/27 19:24 de Simon Deplat