Godot - Marble Madness 3D

Collectionner les objets

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Sommaire

Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.

II. Vidéo


Godot - Marble Madness 3D - Collectionner les objets


III. Résumé

Actuellement, le joueur rebondit contre les objets à collectionner. Ce n'est évidemment pas ce que nous souhaitons, car le joueur doit être capable de ramasser ces objets.

III-A. Identifier les objets à collectionner

Nous devons trouver un moyen d'identifier tous les objets à collectionner. Pour cela, nous allons associer un groupe que l'on appellera « pick up » et chaque objet à collectionner fera partie de ce groupe.
Comme nous éditions la sous-scène et que chaque objet à collectionner et une instance de cette sous-scène, chaque objet intègrera ce groupe.

III-B. Retirer le rebond de la balle avec les objets à collectionner

Pour que la balle ne rebondisse plus avec les objets à collectionner, il faut cocher la propriété « Trigger » du nœud « CollisionShape ». Ainsi, les effets physiques entre les objets à collectionner et la balle n'auront plus lieu.

Toutefois, nous devons pouvoir déterminer si la balle est en collision avec l'un de ces objets. Pour ce faire, nous devons aussi cocher la propriété « Contact Monitor » du nœud « RigidBody » du joueur.
De plus, nous pouvons définir la propriété « Contacts Reported » à 2, sachant que notre balle ne sera en collision qu'avec deux objets à la fois (le sol et un des objets à collectionner ou un mur).

III-C. Déterminer si une collision se produit

À chaque collision, les nœuds impactés envoient des signaux. Ici, nous allons connecter le signal « body_enter » du « RigidBody » du joueur à une fonction de notre script. À chaque début de collision, la fonction connectée sera appelée.

III-C-1. Script

Lorsqu'une collision se produit avec la balle, nous devons d'abord vérifier que l'objet qui est touché est bien un objet à collectionner (sinon, nous ne sommes pas intéressés). Si c'est bel et bien un objet à collectionner, nous le cachons et pour alléger la gestion des collisions, nous l'enlevons du groupe des objets à collectionner.

 
Sélectionnez
func _on_Player_body_enter( body ):
    # Vérifions que l'objet touché est un objet à collectionner.
    if body.is_in_group("pick up"):
        # N'affiche plus le cube
        body.hide()
        # Retire l'objet à collectionner du groupe "pick up"
        body.remove_from_group ("pick up")

Le fait d'enlever l'objet à collectionner de son groupe ne sert pas qu'à l'optimisation des performances, mais aussi à compter le nombre d'objets restant à collectionner.

IV. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

En complément sur Developpez.com

  

Copyright © 2015 Kwesi Davis. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.