Godot
Notes sur le moteur de jeu Godot.
Concepts
- Un jeu = un arbre de scènes, et chaque scène est un arbre de nœuds. Ces nœuds communiquent entre eux avec des
signals. - Scene = un personnage, une arme, un menu, un niveau,...
.tscn= "text scene"
- Signal = la version Godot du pattern
observer - Script
- Attaché à un noeud
- 4 langages possibles => GDScript (recommandé), C#, et C et C++ via GDExtension. On peut utiliser différents langages dans le même projet.
- Chaque script GDScript est implicitement une classe
- Fonctions courantes
_ready(): quand le nœud est instancié_process(): appelée à chaque frame_unhandled_input(): à chaque fois que le joueur appuie sur une toucheget_node(): récupération d'un nœud (raccourci$)get_viewport_rect(): accéder à la fenêtre du jeu (size, etc)
- Propriétés courantes
visible= booléen, contrôle la visibilité du nœud
Architecture
Designer autour des scènes et non autour d'architectures abstraites :
- "We recommend dismissing architectural code patterns when making games with Godot, such as Model-View-Controller (MVC) or Entity-Relationship diagrams" => à la place imaginer les différents éléments que voit le joueur et structurer le code autour d'eux (joueur, ennemi, arme, missile, obstacle,...)
- Exemple => une ville a un pont, un personnage, et une citadelle. La citadelle hérite de la maison, qui a une chambre et une porte,...
Troubleshooting
- Pb de compat windows ? => modifier
renderer/rendering_method="gl_compatibility"dans[rendering]dans le fichierproject.godot
GDScript
Similaire au python
Définition d'une fonction :
signal hit # Crée un signal. Peut être appelé avec [signalName].emit()
@export var plop = 300 # Permet d'accéder à la variable dans l'inspecteur
func my_function(my_parameter):
var truc = 100
while [operation]:
# Do something
for [variable] in range(3):
# Do something
if [operation]:
# Do something
elif [operation]:
# Do something
else:
# Do something
# Array manipulation
my_array.append(truc)
my_array.pop_front() # Pops the first value
my_array.pop_back() # Pops the last value
return
Convention de nommage :
- Classes en PascalCase
- Variables et fonctions en snake_case
- Constantes en ALL_CAPS
Raccourcis
- Drag & drop d'un nœud vers un fichier gdscript, avec bouton ctrl enfoncé => ajoute la propriété avec l'accès
@onready