Coder Social home page Coder Social logo

workshop_2dshooter_godot's Introduction

Workshop shooter en 2D sur Godot

Introduction

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.

Installation

Vous n'avez qu'a installer la version standard de godot et de lancer le binaire qui se trouve dedans.

Création d'un nouveau projet

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

Création du monde

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 ▶.

Création du player

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.

Les caractéristiques du player

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:


Création de l'animation du player

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.

Collision du player

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.


Mouvement du 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.

Configuration des touches

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éation du script

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

Vous avez maintenant un player qui bouge avec une animation distincte pour chaque direction !


Le shooter dans tout ça ?

> Configuration des touches part 2

Configurez le clic de souris comme étant le bouton de tir.

Creation des bullets

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.

Instanciation des bullets

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

Je crée beaucoup trop de bullet quand je tire !

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 un get_owner().add_child()

Pour set la position des Bullet au player, il faut faire un newBullet.set_position(position)

Vous avez maintenant un player qui tire des bullets tout droit !


Viser la lune ? Ca ne me fait pas peur !

Comment faire pour que les tirs visent la souris ?

Rotation du sprite

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.

Velocité des Bullets

changez la vélocité des Bullets afin qu'ils puissent aller vers la souris.

Conclusion

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 !

Contributors

  • Charlie Chou
  • Romain Minguet

workshop_2dshooter_godot's People

Contributors

romain-1 avatar chch270 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.