Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))  (Lu 4871 fois)

0 Membres et 1 Invité sur ce sujet

ZeonSoldier

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Bonsoir,
désolé pour le titre à rallonge, je me dis que ça peut aider quelqu'un plus tard :D

Je vous explique, ça serait pour un projet de jeu éducatif, grosso modo en fonction de la position de la souris, cela va envoyer une valeur à la fonction qui suit afin de donner le chemin du fichier audio à charger et si la personne clique, le son est sensé se jouer.

Cependant cela ne marche pas et j'aimerais savoir si quelqu'un pourrait éclairer ma lanterne (je précise que le fichier audio a été testé dans un autre programme, il se lit normalement), je me demande si c'est pas le if avec le sf::Mouse::... étant donné que c'est une condition brève, je ne sais pas comment faire...

void soundPlayer(int &soundNumber)
{
    sf::SoundBuffer buffer;


    ostringstream pathBuilder;
    string path;

    pathBuilder << "files/" << soundNumber << ".wav";
    path = pathBuilder.str();

    if(!buffer.loadFromFile(path))
    cerr << "Erreur lors du chargement de " << path << endl;

    pathBuilder.str("");

    sf::Sound sound(buffer);

    if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
    sound.play();

}
 

Désolé si la question a déjà été posée j'ai fait une recherche mais je ne suis pas retombé sur ce cas précis :(

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #1 le: Janvier 26, 2019, 12:33:07 am »
Tes sf::Sound et sf::SoundBuffer sont déclarés localement dans la fonction soundPlayer et sont donc détruits à la fin de celle-ci. Et quand ils sont détruits le son s'arrête, il faut donc les déclarer ailleurs où ils auront une durée de vie plus longue.

En ce qui concerne ton isButtonPressed, il est peut être bizarrement placé mais suivant comment tu fais le reste qu'on voit pas ça peut marcher. Donc je ne sais pas mais c'est plutôt facile de savoir si tu rentres dans ce if ou pas :p

ZeonSoldier

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #2 le: Janvier 27, 2019, 12:21:06 pm »
Le problème c'est que j'ai tenté avec un vector<sf::SoundBuffer> que j'ai rempli avec un for(), je l'envoie dans la fonction mais le son ne se joue toujours pas :/


ZeonSoldier

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #3 le: Janvier 28, 2019, 10:09:22 pm »
Tes sf::Sound et sf::SoundBuffer sont déclarés localement dans la fonction soundPlayer et sont donc détruits à la fin de celle-ci. Et quand ils sont détruits le son s'arrête, il faut donc les déclarer ailleurs où ils auront une durée de vie plus longue.

En ce qui concerne ton isButtonPressed, il est peut être bizarrement placé mais suivant comment tu fais le reste qu'on voit pas ça peut marcher. Donc je ne sais pas mais c'est plutôt facile de savoir si tu rentres dans ce if ou pas :p

Désolé pour le double post mais je me demandais ce que tu entendais par "en ce qui concerne ton isButtonPressed, il est peut être bizarrement placé" ?

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #4 le: Janvier 28, 2019, 10:59:10 pm »
Pour que tu rentres dans ton if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) il faut que soundPlayer soit appelé à chaque frame, sinon tu risques de louper le moment où le bouton est pressé. C'est bizarre.
De plus, si c'est ce que tu fais (pour chaque son si tu en as plusieurs d'ailleurs) tu risques d'avoir des bons ralentissements car tu charges (loadFromFile) le son à chaque passage dans la fonction soundPlayer, et c'est une opération plutôt lourde généralement.

L'idéal (dans un premier temps) ça serait peut être de charger tous tes sons une fois à un moment donné dans ton appli (genre quand tu la lances par exemple :p ), et de jouer le son que tu veux quand tu détectes un appuie sur la souris.

ZeonSoldier

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #5 le: Février 01, 2019, 10:29:11 am »
Merci pour le commentaire, je te tiens au courant une fois le code retouché :D
Je vais déjà corriger le soucis du loadFromFile, pour ce qui est de l'appel à la fonction soundPlayer à chaque frame, théoriquement si l'appel et dans le main ça devrait être appelé à chaque fois non ?

Désolé en fait je fais ça en autodidacte en parallèle du travail ou autre quand j'ai le temps, il y a pas mal de réflexes que j'ai pas forcement acquis :s

ZeonSoldier

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re: Son qui ne se joue pas avec if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
« Réponse #6 le: Février 03, 2019, 11:38:18 am »
J'ai suivi ton conseil, j'ai chargé tous les buffers et mêmes tous les sounds au lancement du programme, tout fonctionne parfaitement, merci pour les conseils ;)