Atelier : Codez les bases d’un Infinite Runner et intégrez sons et musiques

Retour à la liste des ateliers

Atelier :
Sons et musiques
Les bases d’un infinite runner

Je vous forme pour que vous sachiez intégrer des bruitages (sons) et des musiques dans vos jeux vidéo. Pour illustrer ce fondamental vous aller créer les bases d’un Infinite Runner avec scrolling horizontal, ainsi qu’un « music mixer » pour passer d’une musique à une autre en « fondu enchaîné » !

A la fin de cet atelier de formation vous saurez :

  • Qu’est qu’un « fichier son » et les formats acceptés
  • Quel outil gratuit utiliser pour convertir ses sons
  • Jouer des sons par programmation
  • Modifier leur volume et les faire boucler
  • Jouer des musiques de fond par programmation
  • Déclencher un son sur un appui d’une touche du clavier
  • Créer un « Music Mixer » pour mixer 2 musiques à la suite
  • Mettre tout cela en oeuvre au sein d’un mini « infinite runner » avec scrolling horizontal et un personnage capable de sauter
Nombre de vidéos: 4
Durée totale des vidéos: 30 mn
Langage(s): Lua
Framework(s) / Moteur(s): Love2D


💾 ACCEDER AUX SOURCES DE L’ATELIER ICI

ADDEDUM : Cet atelier a été mis à jour pour être compatible avec la version 11.0 et supérieur.

Notez  que love.audio.resume est remplacé par un simple appel à love.audio.play. Adaptez le code en conséquence.

Lire cette page concernant les différentes versions de Love2D.


Obtenir les graphismes originaux du projet de démo.

Exercice :

  • Soyez capable de charger, jouer un son / une musique au sein d’un projet Love2D.
  • Si possible : Créez au moins un jeu ou un prototype de jeu exploitant ces concepts.

Pistes de travail :

  • Intégrez des sons et une musique dans un atelier précédent (casse brique, lunar lander, …)

BRAVO !

Vous avez terminé cet atelier ?

Votre badge de progression :

Voir votre progression

Banniere premium

Comments (9)

Bonjour,

J’ai remarqué un petit oubli (peut être voulu pour simplifier l’apprentissage d’ailleurs).

Dans la méthode update, ne faut il pas passer dt pour avoir quelque chose du type :

function myMM.update(dt)
...
music.source:setVolume(music.source:getVolume() + 0.01 * dt);
...
music.source:setVolume(music.source:getVolume() - 0.01 * dt);
...
end

L’idée étant d’avoir quelque chose d’un peu plus linéaire dans la transition.
(même si dans l’exemple, le framerate sera rarement assez instable pour avoir un impacte sur l’écoute).

Dans ce cas, il est possible d’avoir une nouvelle valeur de volume a appliquer de -0.001234. Dans ce cas, love2D garde apparemment la précédente valeur (car il n’accepte pas les valeurs négatives. Logique) et on se retrouve avec un volume proche de 0 mais pas à 0.
Pour avoir quelque chose de clean, j’ai donc adapté avec le code suivant :

function myMM.update(dt)
...
music.source:setVolume(
math.min(
music.source:getVolume() + 0.01 * dt,
1
)
);
...
music.source:setVolume(
math.max(
music.source:getVolume() - 0.01 * dt,
0
)
);
...
end

Evidemment, l’appel à cette méthode update doit être adapté pour ajouter le « dt ».

Bonne journée,

Salut,

Je suis en version love2D 11.2 (vu dans CHANGELOG.md de ZeroBrane Studio).
Apparemment, les fonctions du genre source:resume() ne sont plus valides.
Je laisse le message car au moment d’utiliser la fonction resume, ça plantait!
Donc au même moment j’ai compris les notations en vert et rouge sur le site wiki love2d. Après la fonction « resume », j’ai un joli « -11.0 » rouge qui signifierait qu’elle n’est plus implémentée à partir de la version 11.0. La fonction « resume » ne sert plus à rien car la fonction « play » fonctionne selon que la musique soit « à l’arrêt » ou « en pause ».

Bonne journée à tous!

Bonjour dans le test du main.lua de l’atelier Sons et Musiques , je vois une erreur apparaitre . »main.lua:202:attempt tp perform arithmetic on filed ‘bgX'( a nil value).
Je ne vois pas comment la corriger.
Merci de votre réponse.
Daniel

Cette erreur indique que ta variable bgX est « Nil » c’est à dire vide, tu dois sûrement faire une faute de frappe.
La prochaine fois pose ta question sur le forum principal comme ça je pourrais répondre et tout le monde aura accès à la réponse. Je réponds tous les jours aux questions sur le forum tu as le lien dans le menu tout en haut de la page.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.