Bonjour,

J'essaie actuellement de coder un petit jeu de casse-briques en C++ avec SFML et FMOD.

Pour vous donner une idée du programme :
Dans mon main(), j'appelle la fonction jeu(). Dans cette fonction jeu, j'ai (entre autres), un objet niveau de type Niveau, et un objet balle de type Balle. J'ai aussi un objet sons de type Sons qui gère la création, la lecture et la libération des sons avec FMOD Ex.
A la création de balle et de niveau, je leur envoie un pointeur vers sons afin qu'ils puissent jouer les sons qu'ils veulent quand c'est nécessaire.

Voici l'implémentation des méthodes de ma classe Sons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "Sons.h"
 
Sons::Sons()
{
    // Initialisation de FMOD
        FMOD_System_Create(&system);
        FMOD_System_Create(&system);
        FMOD_System_Init(system, 32, FMOD_INIT_NORMAL, 0);
        channel = 0;
 
    // Chargement des sons
        FMOD_System_CreateSound(system, "Datas/Sons/raquette.wav", FMOD_SOFTWARE, 0, &raquette);
        // [...]
 
}
 
Sons::~Sons()
{
    FMOD_System_Release(system);
    FMOD_Sound_Release(raquette);
    // [...]
}
 
void Sons::jouer(int num)
{
    if( num == RAQUETTE )
        FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, raquette, 0, &channel );
    // [...]
}
Venons-en maintenant au problème : quand je quitte le jeu ( fin de la fonction jeu() ), le programme se bloque.
C'est dans le destructeur de la classe Sons que ça coince. En fait, bizarrement, c'est quand je release un son qui a été joué que ça bloque. Ainsi, si je quitte le jeu avant que la balle n'ait touché quoi que ce soit, il n'y aura aucun problème. Par contre, si je touche par exemple une brique, le son de la brique va se jouer et, quand je veux quitter le programme, tous les releases placés avant celui de la brique sont bien faits, et c'est quand ça arrive à celui de la brique que ça bloque.

Pouvez-vous m'aider s'il vous plait ?

Merci.

EDIT : Résolu. Il fallait mettre FMOD_System_Release après les FMOD_Sound_Release.