Cette documentation comme les pages Instances et Projet s’appuie sur la documentation officielle de Godot engine en anglais et celle de la communauté francophone de Godot
Les scripts sont associés à un nœud et étendent son comportement. Cela signifie que les scripts héritent de toutes les fonctions et propriétés du nœud auquel ils sont associés.
Prenons par exemple un jeu dans lequel un nœud Camera2D suit un vaisseau. Par défaut, le nœud Camera2D suit son parent. Imaginons que vous souhaitiez que la caméra tremble lorsque le joueur subit des dégâts. Comme cette fonctionnalité n’est pas intégrée à Godot, il faut associer un script au nœud Camera2D et programmer ce tremblement.

Godot prend en charge principalement 4 langages de programmation pour le gameplay : GDScript, C# et, via sGDExtension, C et C++. I
GDScript est un langage de programmation orienté objet et impératif conçu pour Godot. Il a été créé par et pour les développeurs de jeux afin de vous faire gagner du temps lors de la programmation de vos jeux.

Ses fonctionnalités comprennent :
GDScript ressemble à Python dans la mesure où vous structurez vos blocs de code à l’aide d’indentations, mais il ne fonctionne pas de la même manière en pratique. Il s’inspire de plusieurs langages, notamment Squirrel, Lua et Python.
Pour apprendre à programmer avec le langage GDScript de Godot :
Pour rechercher des informations sur une classe, une méthode, une propriété, une constante ou un signal
appuyer sur F1 (sinon Opt + EspaceouFn + F1)
cliquer sur Rechercher dans l’aide situé en haut à droite de l’espace Script, ou le lancer via le menu Aide,
Pour ouvrir la documentation
Faire Ctrl + clic (Cmd sous macOS) sur le nom d’une classe, d’une fonction ou d’une variable dans l’éditeur de script
Enfin clic droit sur les nœuds, choisir Open Documentation
cliquer sur Lookup Symbol for elements (Rechercher le symbole) ouvre directement leur documentation.
créer un nouveau projet pour repartir de zéro. Votre projet doit contenir une seule image : l’icône Godot, que nous utilisons souvent pour le prototypage au sein de la communauté.
Il faut créer un nœud Sprite2D pour l’afficher dans le jeu. Dans le volet Scène
, cliquez sur le bouton Autre nœud
.

Tapez Sprite2D
dans la barre de recherche pour filtrer les nœuds, puis double-cliquez sur Sprite2D pour créer le nœud.
. Votre onglet Scene
ne devrait désormais contenir qu’un nœud Sprite2D.


cliquez avec le bouton droit de la souris sur Sprite2D
dans le volet Scène
et sélectionnez Attach Script
.
La fenêtre Attach Node Script
s’affiche. Elle vous permet, entre autres, de sélectionner le langage du script et le chemin d’accès au fichier.
Modifiez la valeur du champ Template
en passant de Node : Default
à Object : Empty
pour partir d’un fichier vierge. Laissez les autres options sur leurs valeurs par défaut, puis cliquez sur le bouton Create
pour créer le script
L’espace de travail Script
devrait s’afficher avec votre nouveau fichier sprite_2d.gd
ouvert et la ligne de code suivante :
extends Sprite2DChaque fichier GDScript est implicitement une classe. Le mot-clé extends
définit la classe dont ce script hérite ou qu’il étend. Dans ce cas, il s’agit de Sprite2D, ce qui signifie que notre 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.
Remarque
En GDScript, si vous omettez la ligne contenant le mot-clé extends
, votre classe héritera implicitement de RefCounted, que Godot utilise pour gérer la mémoire de votre application.
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.
Remarque
Par défaut, l’Inspecteur affiche les propriétés d’un nœud en Title Case
, avec les mots en majuscules séparés par un espace. Dans le code GDScript, ces propriétés sont en snake_case
, c’est-à-dire en minuscules avec chaque mot séparé par un trait de soulignement.
Vous pouvez passer la souris sur le nom de n’importe quelle propriété dans l’Inspecteur pour afficher une description et son identifiant dans le code.
Hello, world !
Pour l’instant, notre script ne fait rien. Pour commencer, faisons-lui afficher le texte Hello, world !
dans le panneau inférieur Output
.
s :
<div class="grid-container">
<div class="p1" id="page1">…</div>
<div class="p2" id="page2">…</div>
<div class="p3" id="page3">…</div>
<div class="p4" id="page4">…</div>
<div class="p5" id="page5">…</div>
</div>func_init(): print(« Hello, world ! »)
Le mot-clé func
définit une nouvelle fonction nommée _init. Il s’agit d’un nom spécifique désignant 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.
Remarque
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 vous l’omettez ou si vous n’indentez pas correctement une ligne, l’éditeur la mettra en surbrillance en rouge et affichera le message d’erreur suivant : Indented block expected
.
Enregistrez la scène sous le nom sprite_2d.tscn si ce n’est pas déjà fait, puis appuyez sur F6 (Cmd + R sous macOS) pour l’exécuter. Observez le panneau inférieur Output
qui s’affiche. Il devrait afficher Hello, world !
.
Supprimez la fonction _init() afin qu’il ne reste plus que la ligne extends Sprite2D.extends Sprite2Dvarspeed=400
varangular_speed=PILes variables membres se trouvent vers le début du script, après les lignes extends
, mais avant les fonctions. Chaque instance de nœud à laquelle ce script est associé disposera de sa propre copie des propriétés speed
et angular_speed
.
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.
Pour déplacer notre icône, nous devons 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.
Remarque
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.
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.
Au bas du script, définissez la fonction :
extends Sprite2D_process(delta):
rotation+=angular_speed*deltaLe 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.
Remarque
Remarquez que _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.
La ligne à l’intérieur de la fonction, rotation += angular_speed * delta, incrémente la rotation de notre sprite à chaque image. 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.
Astuce
Dans l’éditeur de code, vous pouvez appuyer sur Ctrl + clic (Cmd + clic sous macOS) sur n’importe quelle propriété ou fonction intégrée, telle que position, rotation ou _process, pour ouvrir la documentation correspondante dans un nouvel onglet.
Exécutez la scène pour voir l’icône Godot tourner sur place.

Faisons maintenant bouger le nœud. Ajoutez 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.
extends Sprite2Dvelocity=Vector2.UP.rotated(rotation)*speed
position+=velocity*deltaComme nous l’avons déjà vu, le mot-clé `var` définit une nouvelle variable. Si vous le placez en début de script, il définit une propriété de la classe. À l’intérieur d’une fonction, il définit une variable locale : celle-ci n’existe que dans la portée de la fonction.
Nous définissons 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 notre propriété vitesse
, elle nous donne une vitesse que nous pouvons utiliser pour faire avancer le nœud.
Nous ajoutons velocity * delta à la position du nœud pour le déplacer. La position elle-même est de type Vector2, un type intégré à Godot représentant un vecteur 2D.
Lancez la scène pour voir la tête Godot courir en cercles
.
Déplacer un nœud de cette manière ne tient pas compte des collisions avec les murs ou le sol. Dans votre premier jeu en 2D, vous découvrirez une autre approche pour déplacer des objets tout en détectant les collisions.Here is the complete sprite_2d.gd file for reference.
extends Sprite2DSprite2D
varspeed=400
varangular_speed=PI
func_process(delta):
rotation+=angular_speed*delta
varvelocity=Vector2.UP.rotated(rotation)*speed
position+=velocity*delta