Nouveau projet Sprite2D

Exercice à partir d’une image

Créer un nouveau projet pour repartir de zéro. Votre projet doit contenir une image comme ici l’icône Godot…

  1. Dans le volet Scène, cliquez sur le bouton Autre nœud.

  2. Il faut créer un nœud Sprite2D pour l’afficher dans le jeu. Taper Sprite2D dans la barre de recherche pour filtrer les nœuds, puis double-cliquer sur Sprite2D pour créer le nœud.

  3. Un nœud Sprite2D a besoin d’une texture pour s’afficher. Dans l’Inspecteur situé à droite, vous pouvez voir que la propriété Texture indique <vide>.

    Cliquer sur la flèche vers le bas à côté, choisir Charger, sélectionner le fichier icon.svg

    Capture d’écran 2026-10-08 à 15.17.37

  4. Vous pouvez créer automatiquement des nœuds Sprite2D en glissant-déposant des images dans la fenêtre d’affichage.

    Ensuite, cliquez sur l’icône dans la fenêtre d’affichage et faites-la glisser pour la centrer dans la vue du jeu.

    Capture d’écran 2026-10-08 à 15.52.37

Création d’un nouveau script

  1. Faire un clic droit sur Sprite2D dans le volet Scène et choisir Attacher un Script.

    Capture d’écran 2026-10-08 à 15.54.19

  2. La fenêtre Attacher un Script au Nœud s’affiche. Elle permet de sélectionner le langage du script et le chemin d’accès au fichier.

    Capture d’écran 2026-10-08 à 15.55.15

  3. Modifiez la valeur du champ Modèle en passant de Node : Default à Object : Empty pour partir d’un fichier vierge. Puis choisir Créer

  4. L’espace de travail Script devrait s’afficher avec votre nouveau fichier sprite_2d.gd ouvert et la ligne de code suivante :

extends Sprite2D

Capture d’écran 2026-10-08 à 15.55.34

Chaque fichier GDScript est implicitement une classe. Le mot-clé extends définit la classe dont ce script hérite ou qu’il étend. Ainsi, le script aura accès à toutes les propriétés et fonctions du nœud Sprite2D, y compris celles des classes dont il est l’extension, telles que Node2D, CanvasItem et Node.

Les propriétés héritées incluent celles que vous pouvez voir dans le dock de l’Inspecteur, comme la texture de notre nœud.

Dans le code GDScript, les propriétés écrites en majuscules avec des espaces dans l’Inspecteur sont à appeler en minuscules avec chaque mot séparé par underscore (tiret du bas). ainsi la propriété Flip V dans l’inspecteur devient flip_v

Passer la souris sur le nom sur le nom d’une propriété dans l’Inspecteur affiche sa description en code.

Ajouter au script ces lignes pour afficher le texte Hello, Gamer ! dans l’onglet Sortiedu panneau inférieur de l’éditeur :

func _init():
 print(« Hello, Gamer ! »)

func définit une nouvelle fonction nommée _init qui est le constructeur de notre classe. Le moteur appelle _init() sur chaque objet ou nœud dès sa création en mémoire, si vous définissez cette fonction.

GDScript est un langage basé sur l’indentation. La tabulation au début de la ligne contenant print() est indispensable au bon fonctionnement du code. Si elle n’est pas présente, il y aura ce message d’erreur suivant : Indented block expected :

Enregistrer la scène sous le nom sprite_2d.tscn puis jouer-la. Dans le panneau inférieur Sortie devrait s’afficher Hello, Gamer.

Changer la position

Supprimer la fonction _init() afin qu’il ne reste plus que la ligne extends Sprite2D.

Juste après, créer 2 variables au script, : speed est définie comme la vitesse de déplacement en pixels par seconde et angular comme la vitesse angulaire en radians par seconde :

var speed=400
var angular_speed = PI

NB : Comme elles sont déclarées avant l’écriture de fonction, en dbut de script, chaque instance de nœud à laquelle ce script est associé disposera de sa propre copie des propriétés définies par ces variables.

Remarque

  • Dans Godot, les angles sont exprimés en radians par défaut, mais des fonctions et propriétés intégrées sont disponibles si vous préférez calculer les angles en degrés.
  • Les jeux fonctionnent en affichant de nombreuses images par seconde, appelées images (frames), et ce, dans une boucle. On mesure la cadence à laquelle un jeu produit des images en images par seconde (FPS). La plupart des jeux visent les 60 FPS, bien que l’on puisse observer des valeurs telles que 30 FPS sur des appareils mobiles plus lents ou entre 90 et 240 pour les jeux en réalité virtuelle.
Déplacer le nœud

Pour déplacer l’icône, il faut mettre à jour sa position et sa rotation à chaque image dans la boucle de jeu. Nous pouvons utiliser la fonction virtuelle _process() de la classe Node. Si vous la définissez dans une classe qui étend la classe Node, comme Sprite2D, Godot appellera cette fonction à chaque image et lui transmettra un argument nommé delta, correspondant au temps écoulé depuis la dernière image.

Dans le jeu, écrire ces lignes pour incrémenter la rotation de notre sprite à chaque image.

func _process(delta):
 rotation += angular_speed * delta
  • Ici, rotation est une propriété héritée de la classe Node2D, dont Sprite2D est une extension. Elle contrôle la rotation de notre nœud et fonctionne en radians.
  • Les développeurs du moteur et du jeu font de leur mieux pour mettre à jour l’univers du jeu et afficher les images à un intervalle de temps constant, mais il existe toujours de légères variations dans les temps d’affichage des images. C’est pourquoi le moteur nous fournit cette valeur de temps delta, rendant ainsi notre mouvement indépendant de notre fréquence d’images.
  • Le mot-clé func définit une nouvelle fonction. Il est suivi du nom de la fonction et des arguments qu’elle prend, entre parenthèses. Un deux-points clôt la définition, et les blocs en retrait qui suivent constituent le corps de la fonction, c’est-à-dire ses instructions.
  • _process(), tout comme _init(), commence par un trait de soulignement. Par convention, les fonctions virtuelles de Godot, c’est-à-dire les fonctions intégrées que vous pouvez redéfinir pour communiquer avec le moteur, commencent par un trait de soulignement.

Lancer la scène : l’icône Godot tourner sur place.

Ezgif 52d680d8b6c37c23

Bouger le nœud

Ajouter les deux lignes suivantes à l’intérieur de la fonction _process() (en veillant à ce que les nouvelles lignes soient indentées de la même manière que la ligne rotation += angular_speed * delta qui les précède.)

var velocity = Vector2. UP.rotated(rotation) * speed
position += velocity * delta
  • le mot-clé var définit une nouvelle variable. Si vous le placez en haut du script, il définit une propriété de la classe. À l’intérieur d’une fonction, il définit une variable locale : elle n’existe que dans la portée de la fonction.
  • La première ligne crée une variable locale nommée velocity, un vecteur 2D représentant à la fois une direction et une vitesse. Pour faire avancer le nœud, nous partons de la constante Vector2. UP de la classe Vector2, un vecteur pointant vers le haut, et nous le faisons pivoter en appelant la méthode rotated() de Vector2. Cette expression, Vector2. UP.rotated(rotation), correspond à un vecteur pointant vers l’avant par rapport à notre icône. Multipliée par la propriété speed, elle nous donne une vitesse utilisable pour faire avancer le nœud.
  • La deuxième ligne ajoute velocity * delta à la position du nœud pour le déplacer.

Lancer la scène pour voir la tête Godot courir en cercles

../../_images/scripting_first_script_rotating_godot.gif

Déplacer un nœud de cette manière ne tient pas compte des collisions avec les murs ou le sol. Et pour l’instant, le nœud se déplace tout seul.

Donner le contrôle au joueur

Dupliquer le script précédent, en faisant un clic droit dans la palette Système de fichiers à gauche sur le nom du fichier script sprite_2D.gd. Nommer le nouveau script sprite_2D-01.gd.

Puis faire un clic droit sur sprite_2D.tscn, la scène, pour choisir Modification des dépendances

Capture d’écran 2026-10-09 à 08.59.27

choisir de charger à la place du nom diu précédent script le nouveau sprite_2D-01.gd

Capture d’écran 2026-10-09 à 08.53.52

Désactiver des lignes de script

Pour mettre en commentaires les lignes :

var velocity = Vector2. UP.rotated(rotation) * speed
position += velocity * delta

il faut rajouter le signe # au début des lignes de code (comme en langage python)

#var velocity = Vector2. UP.rotated(rotation) * speed
#position += velocity * delta

Utiliser des données du joueur

2 outils principaux permettent de traiter les données du joueur dans Godot :

  1. Les rappels d’entrée intégrés, principalement _unhandled_input(). cette fonction virtuelle intégrée est appellée par Godot à chaque fois que le joueur appuie sur une touche. C’est l’outil que vous voulez utiliser pour réagir aux événements qui ne se produisent pas à chaque image, comme appuyer sur Espace pour sauter (voir Utilisation d’InputEvent)

  2. Le singleton Input. Un singleton est un objet accessible à tous. Godot donne accès à plusieurs d’entre eux dans les scripts. C’est le bon outil pour vérifier l’entrée à chaque image.

Utiliser le singleton Input ici permet de savoir si le joueur veut tourner ou bouger à chaque image. Pour le tourner, il fauts utiliser une nouvelle variable : direction.

Dans la fonction _process(), remplacez la ligne rotation += angular_speed * delta, surligné ci-dessous :

Capture d’écran 2026-10-09 à 10.37.16

Et mettre à la place le code ci-dessous.

var direction = 0
if Input.is_action_pressed("ui_left"):
    direction = -1
if Input.is_action_pressed("ui_right"):
    direction = 1
rotation += angular_speed * direction * delta

NB : Les deux actions utiliséesui_left et ui_right, sont prédéfinies dans chaque projet Godot. Elles se déclenchent respectivement lorsque le joueur appuie sur les flèches gauche et droite du clavier ou sur les flèches gauche et droite du D-pad d’une manette.

Explications

  • Pour produire ces valeurs, nous introduisons des instructions conditionnelles et l’utilisation de Input. Une instruction conditionnelle commence par le mot-clé if en GDScript et se termine par deux points. L’instruction conditionnelle est précisément l’expression entre le mot-clé et les deux-points à la fin de la ligne.

  • Pour vérifier si une touche a été enfoncée dans cette image, nous appelons Input.is_action_pressed(). Cette méthode prend une chaîne de texte représentant une action d’entrée et renvoie true si l’action est pressée, false sinon.

  • Enfin, nous utilisons le direction comme multiplicateur lorsque nous mettons à jour le nœud rotation : rotation += angular_speed * direction * delta.

Votre nouveau contenu