top of page

TUTO -02b : Déplacer et faire interagir son personnage (Partie 2).

Ce tutoriel est en continuité avec la 1ere partie.

imprim_2ba.jpg

1°- Les collisions d'objets 2D

Godot propose 2 notions dans les systèmes de collision. La notion de zone (area) et la notion de corps (body):

-Area peut être considérer comme une zone fantôme (qui peut être traversée).

-Body peut être considérer comme une zone matérielle (qui ne peut pas être traversée).

​

Il vous faudra par la suite délimiter vos types de collisions par une surface et/ou une ligne:

-CollisionPolygon2D

-CollisionShape2D

-Raycast2D

imprim_2aa.jpg
imprim_2ad.jpg

2°- Créer son personnage - KinematicBody

Le nœud KinematicBody possède un ensemble de fonctions facilitant le déplacement et les interactions de vos personnages, vos ennemis et vos ''objets mobiles''. Pour notre exemple, nous allons compléter ce nœud avec les nœuds Sprite (pour l'image) et CollisionShape2D (pour gérer les collisions).

KinematicBody nous permet d'accéder à certaines fonctions (méthodes):

-Move_and_collide()

-Move_and_slide()

-Move_and_slide_and snap()

imprim_2bd.jpg

3°- Comprendre la méthode 'Move and Slide()'

Cette "méthode" prend en charge le déplacement et certaines interactions de vos objets, personnages, etc... Si ces derniers entrent en collision, ils contourneront ou glisseront le long de l'obstacle (l'obstacle doit être de type "body" pour que cela soit actif).

​

Move_and_slide () doit être intégré dans la boucle "func _physics_process(delta):" de votre script.

​

move_and_slide ()

-linear_velocity: Vecteurs x,y,z de déplacement de l'entité.

-up_direction: Définir le point haut (permet d'utiliser les fonctions is_on_floor, is_on_wall et is_on_ceiling).

-stop_on_slope: L'entité arrête de se déplacer s'il y a une pente.

-max_slides: le glissement s'arrête jusqu'à une certaine valeur.

-floor_max_angle: Considérer comme "le sol" jusqu'à un certain angle.

-infinite_inertia: Interaction avec une entité de type RigidBody.

4°- Créer un obstacle - StaticBody2D

Le nœud StaticBody va être utilisé principalement pour créer des objets immobiles (mur, plateforme, obstacle simple). 

​

Pour notre exemple, nous utilisons une caisse. Le nœud CollisionShape2D permettra de définir les contours de collisions.

Dans l'onglet "Inspecteur", sélectionner votre forme de collision dans"Shape" (pour notre cas, un rectangle).

​

imprim_2aj.jpg
imprim_2al.jpg
imprim_2ak.jpg

5°- Créer zone de contact - Area2D

Le nœud Area2D est une "zone d'influence". Il est capable de signaler et de reconnaître qui ou quoi a interagit avec lui. Pour notre exemple, nous allons créer une trappe qui une fois touchée disparaitra avec le "Player". Pour cela nous allons émettre un "Signal".

Pour que le nœud soit actif pour les collisions, il vous faudra le compléter avec CollisionShape2D.

​

​

imprim_2be.jpg
imprim_2bb.jpg

6°- Le script

​

extends KinematicBody2D

export (int) var vitesse = 300 

var velocity = Vector2() 

​

func Controle_Clavier(): 
   velocity = Vector2()
   if Input.is_action_pressed("ui_right"):
       velocity.x += 1
   if Input.is_action_pressed("ui_left"):
       velocity.x -= 1
   if Input.is_action_pressed("ui_down"):
       velocity.y += 1
   if Input.is_action_pressed("ui_up"):
       velocity.y -= 1
   velocity = velocity.normalized() * vitesse

​

​

func _physics_process(delta):           
   Controle_Clavier()                  
   velocity = move_and_slide(velocity) 

​

->]func _QuandJeTouche(body):
   print ('C est un piége!!!')
   hide()
   get_parent().get_node("ZoneDeContact").hide()
   

->]func _QuandJeTouchePas(body):
   print ('ouf!!!')
   show()
   get_parent().get_node("ZoneDeContact").show()

imprim_2bf.jpg
imprim_2bc.jpg

7°- Générer un "Signal" avec Area2D

Chaque nœud a la possibilité d'émettre un signal, et ainsi dire, de créer une passerelle de communication. Le nœud Area2D a la particularité de pouvoir signaler si un objet entre dans sa zone, d'en définir le type (area, body) et de reconnaitre le nœud correspondant.

Dans l'onglet "Node" de votre noeud Area2D:

 -Sélectionner le signal body_entered, et faite un clique droit pour afficher un menu déroulant.

- Sélectionner "Connecter...", une fenêtre apparaitra.

- Il vous faudra choisir le script qui pourra recevoir ce signal.

-Une fois choisi, une fonction avec un symbole vert  ->] s'affichera. Votre signal est connecté! 

​

A chaque fois qu'un élément de type body entrera dans le périmètre de Area 2D. Area 2D émettra un signal , rendant actif dans le script la fonction réceptrice.

imprim_2bg.jpg
imprim_2bh.jpg
imprim_2bi.jpg
imprim_2bf.jpg

Nous contacter

 Tél : 06 17 95 56 83

ionocraft@hotmail.fr

Visible sur :

  • Linkedin
  • Icône social Instagram

Donations :

ICARE © 2024 par ICARE

bottom of page