Partager via


Small Basic: Comment Ajouter une Musique de Fond dans un Jeu (fr-FR)

Il y a quelque temps, une ancienne discussion du forum Small Basic, My custom sounds won't repeat. Any idea why? (en-US), et redevenue active.

Dans cet article nous allons essayer de montrer, comment nous pouvons facilement ajouter une musique de fond dans n'importe quel jeux ou programmes Small Basic juste en ajoutant une sous-routine d'événement, un événement Timer.Tick et quelques indicateurs.

L'exemple qui suit utilise Sound.PlayAndWait(filePath) depuis une sous-routine d'événement (Sub BGSound), qui est appelée au démarrage du programme (juste avant d'entrer dans la boucle principale) et est utilisé comme un thread asynchrone, en parallèle de la boucle principal. La sous-routine est appelé par Timer.Tick. Rappelez vous que Timer.Tick est le seul événement natif dans Small Basic, qui fonctionne également avec TextWindow.
Etant donné que le multitâche n'est pas un sujet facile pour les débutant et qu'il n'est pas souvent utilisé dans les programmes Small Basic, vous devriez certainement commencer par lire le très bon article de LitDev Small Basic:Le Threading (Multitâche) sur ce sujet.

Vous devriez connaître cet exemple ("Casse Briques") de Vijaye Raji dans Introduction au Small Basic.pdf qui est fourni avec l'installation de Small Basic.
Nous allons juste l'améliorer avec un thème sonore qui joue en boucle en tâche de fond. Ça devrait rendre plus facile de voir les différences entre les deux versions et l'application de ces modifications dans vos propres programmes ou jeux.

Casse Briques avec une musique de fond: MXN768

'' Jeu du casse briques avec une musique de fong
 
soundFile  = "http://jamsspace.com/songs/SOJA-Strength-To-Survive/03-Everything-Changes.mp3"
soundOff  = "True"          ' La musique de fond est acctuellement arrêtée ?
loopAudio  = "True"        ' Répétition continue de la musique de fond ?
 
' Démarre la musique de fond au moins une fois, premire boucle
Timer.Interval = 10        ' appelle la musique dans 10 [ms]
Timer.Tick = BGSound       ' Sous-routine où exécuter en boucle de la musique de fond (et vérifier son état)
 
While soundOff <> "False"  ' Attends jusqu'à ce que la musique de fond soit chargée et commence à la jouer avant que la fenêtre graphique ne soit affichée
  Program.Delay(500)
EndWhile
Program.Delay(3000)
 
GraphicsWindow.BackgroundColor = "DarkBlue"
paddle = Shapes.AddRectangle(120, 12)
ball = Shapes.AddEllipse(16, 16)
'Mouse.HideCursor()
 
GraphicsWindow.MouseMove = OnMouseMove
 
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
x = 0
y = 0
deltaX = 1
deltaY = 1
 
RunLoop:  ' débit de la boucle de jeu
'If soundOff = "True" And loopAudio = "True" Then
' Timer.Interval = 10
'EndIf
x = x +  deltaX
y = y +  deltaY
 
If (x >= gw -  16 Or x <= 0) Then
  deltaX = -deltaX
EndIf
 
If (y <= 0) Then
  deltaY = -deltaY
EndIf
 
padX = Shapes.GetLeft(paddle)
If (y = gh -  28 And x >= padX And x  <= padX + 120) Then
  Sound.PlayClick()       ' son de jeu intermédiaire
  deltaY = -deltaY
EndIf
 
Shapes.Move(ball, x, y)
Program.Delay(5)
 
If (y < gh)  Then
  Goto RunLoop
  ' EndIf
  
Else  '' Vous avez perdu et le jeu est terminé. Vous pouvez ...
  Sound.PlayChime()
  GraphicsWindow.ShowMessage("Vous avez perdu !!", "Casse Briques")
  
  '' ... attendre que la lecture de la musique en cours soit terminée, ALORS le programme se terminera.
  loopAudio = "False"
  GraphicsWindow.DrawText(10,10, "Le programme se terminera automatiquement lorsque la musique sera finie.")
  'Mouse.ShowCursor()
  While soundOff =  "False"
    Program.Delay(200)
  EndWhile
  
  Program.End()
EndIf
 
' ========== EVENEMENTS ==========
Sub OnMouseMove
  paddleX = GraphicsWindow.MouseX
  Shapes.Move(paddle, paddleX -  60, GraphicsWindow.Height - 12)
EndSub
 
' Sous-routine d'événement pour la répétition de la lecture en parallèle
Sub BGSound
  Timer.Pause()
  While loopAudio = "True"
    soundOff = "False"
    Sound.PlayAndWait(soundFile)
    soundOff = "True"
  EndWhile
EndSub
    
 

A noter les deux indicateurs nommés loopAudio et soundOff. Ils peuvent contenir des valeurs booléennes "True" ou "False" (ou tout autres valeurs que "True") et permettent le contrôle du flux du programme.

loopAudio  défini si la lecture de l'audio sera répétée tout le temps. Si défini à "False" à n'importe quel point ou moment de la boucle principale. La boucle audio continuera jusqu'à ce qu'elle soit terminée et alors la musique de fond s'arrêtera.
soundOff  est utilisé pour détecter si la commande Sound.PlayAndWait est toujours active (soundOff = "False") ou si le n'est plus en cours de lecture.

Pour plus d'explications, veuillez lire les commentaires qui se trouvent au début du code d'exemple. Vous pouvez ajouter plus d'indicateurs ou de modifications et tester les différents indicateurs les lignes de commentaires, pour constater l'impact des modifications sur le flux du programme. Garder à l'esprit, que toutes les variables d'indicateurs ont une "portée globale" dans Small Basic et sont valides à travers tous les endroits du programme, dans chaque sous-routines autant que dans la boucle principale.

Voir Aussi

Autres Langues