Godot est un moteur de jeu multiplateforme, c'est-à-dire un logiciel permettant de créer des jeux vidéo qui est compatible avec différents systèmes d'exploitation. Il possède la faculté de pouvoir créer des jeux en 2D ou en 3D avec son propre langage, le GDScript qui ressemble au python.
Vous n'avez qu'a installer la version standard de godot et de lancer le binaire qui se trouve dedans.
Vous allez arriver ici:
Pour créer un nouveau projet, il suffit de faire:
New Project -> Mettre son nom de projet -> Create folder -> Create & Exit
Lorsque vous commencez un projet Godot, la première étape est de faire un monde dans lequel vous allez pouvoir placer des objets, players et ennemies. Nous allons donc commencer par créer notre monde en 2D.
Vous arrivez ici après la manipulation précédente:
Commencez par créer une Scene 2D.
Et... c'est tout. Vous pouvez maintenant sauvegarder votre monde. N'hésitez pas à renommer votre scene pour plus de clarté.
Vous pouvez maintenant lancer votre monde avec le bouton ▶.
Maintenant que nous avons notre monde, nous pouvons maintenant créer notre player. Ce que nous allons faire, c'est que l'on va créer une autre scène qui sera notre joueur.
Nous voulons que notre player ne soit pas soumis à la gravité car nous voulons avoir le total contrôle sur notre perso. Nous allons créer un KinematicBody2D qui sera la base de notre player. Nous voulons aussi un player animé afin qu'on puisse voir notre player bouger lors de mouvement. Il faut donc hériter la node AnimatedSprite à notre KinematicBody2D.
Au final, nous aurons quelque chose de ce genre:
En selectionnant AnimatedSprite, on peut créer les frames qui servirera à animer le player. Il suffit d'apuyer sur Frames et de faire un New SpriteFrame. Réappuyez sur SpriteFrame et vous allez être sur cette interface:
Vous pouvez dès à présent créer vos animations avec vos sprite sheets. Pour ce faire, vous devez appuyer sur le bouton "Add frames from a Sprite Sheet". Découpez votre sprite sheet afin que l'on puisse récupérer les sprites.
C'est maintenant à vous de créer les animations de votre players.
Vous pouvez voir qu'il y a encore une erreur sur le KinematicBody2D et qu'il demande une CollisionShape2D.
Créez donc en un et placez bien la collision sur votre player.
Maintenant que votre player est fait, il suffit maintenant de créer un script qui permet de le faire bouger avec les touches du clavier.
Configurez d'abord les touches du clavier dans:
Project -> Project Settings -> Input Map
Ici, vous allez bind les touches du clavier pour faire bouger le player.
Ca devrait ressembler à ceci:
On peut commencer la partie intéressante: Le code !
Créez un script qui va se lier au KinematicBody2D du player.
Nous avons le _ready
qui nous permet d'initialiser le player et _process
qui nous permet de faire des choses chaque frame.
Pour avoir une speed configurable dans l'interface graphique, il suffit de faire un export d'une variable.
Dans le _process, récupérez les inputs du joueur avec la fonction
Input.is_action_pressed(string button)
.
Avec les inputs récupérés, nous pouvons faire bouger notre player avec une certaine vélocité.
A l'aide de la fonction
move_and_slide(velocity)
, faites bouger votre player avec les inputs récupérés.
Vous pouvez changer l'animation du player en changeant directement la valeur de AnimatedSprite comme ceci:
$AnimatedSprite.animation = string
Configurez le clic de souris comme étant le bouton de tir.
Si vous avez bien suivi tout le tuto, vous savez créer une scène, un objet et un script.
Créez une scène Bullet qui sera la bullet en KinematicBody2D, un Sprite et un script qui le fera avancer tout droit avec une vitesse modifiable via l'interface graphique.
Ce qu'on va faire, c'est qu'on va preload la scene Bullet, et à chaque fois que l'on tire, on va instancier une Bullet.
var bulletScene = preload(path)
pour preload la scene
var newBullet = bulletScene.instance()
pour instancier une bullet
Pour que les bullets ne soient pas perdus après l'instanciation, il faut les rajouter en tant que child du player.
add_child(newBullet)
pour les rajouter en tant qu'enfant du player
Il est temps de gérer son temps. Pour cela, rajoutez un Timer au player qui sera donc son cooldown afin de retirer à nouveau.
Créz une node Timer en enfant du player et mettez le cooldown à 0.5.
Cochez one shot afin que le Timer commence lorsque l'on le souhaite.
$Timer.time_left
pour avoir le temps restant
$Timer.start()
pour commencer le chrono
On se retrouve avec 2 problèmes:
- Il y a une collision entre la Bullet et le player
- La Bullet suit le player
Pour régler le soucis de la collision, il suffit de changer le layer et le mask de la Bullet dans les collisions.
Pour ce qui est des bullets qui nous suit, il suffit de mettre la Bullet en tant que enfant du monde. Pour ce faire, nous allons devoir travailler dans la scene monde. Pour mettre un player dans le monde, il suffit de glisser la scene dans le monde.
au lieu d'avoir un
add_child()
, nous allons avoir unget_owner().add_child()
Pour set la position des Bullet au player, il faut faire un
newBullet.set_position(position)
Comment faire pour que les tirs visent la souris ?
Pour ce faire, il suffit de faire regarder les Bullets dans la direction de la souris. On peut donc le faire regarder une position avec look_at(Vector2)
et avoir la position de la souris avec get_global_mouse_position()
.
faites regarder les Bullets vers la direction de la souris.
changez la vélocité des Bullets afin qu'ils puissent aller vers la souris.
Grâce à ce tutorial, vous avez appris à créer une scene, ajouter des childs à des nodes, faire des scripts et en plus, vous avez un bonhomme qui tire là où voulez !
- Charlie Chou
- Romain Minguet