SFML/C++ Maximale Maus Klicks in einer gewissen Zeit



  • So bei meinem SFML Projekt soll bei einem Klick der linken Maustaste ein Sound abgespielt werden. Beispiel:

    if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
    	{
    		test.openFromFile("Data/Sound/test.wav");
    		test.setVolume(30);
    		test.play();
    	}
    

    Wenn man jetzt aber schneller drückt, hört man den Sound natürlich nur halb. Nun suche ich die beste Methode, die maximalen Klicks mit der Maus in einer gewissen Zeit zu begrenzen.



    1. Mach das openFromFile() 1x bei der Initialisierung statt bei jedem Klick.
    2. Frag den Sound ob er noch spielt (sf::Sound::getStatus wenn du SFML 2.0 verwendest).
      Wenn er noch spielt machst du nix, wenn er nimmer spielt das setVolume() und play()


  • Du solltest input bei games immer timen. Ich weiss ja nicht wofür du die Klicks verwendest, aber wenn du es als beispiel fürs schiessen benutzt, dann kann man ohne timing so oft schiessen wie man möchte.

    Block den linksklick für ein paar milisekunden und gib ihn mittels eines timers wieder frei.

    if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
        {
            if ( canShoot == true )
            {
                if ( test.getStatus() == sf::Sound::Stopped ){
                  test.setVolume(30);
                  test.play();             
                }
                shoot();
            }
        }
    

    Desweiteren solltest du den Sound cachen (aka woanders laden) und nicht ständig neu laden, wenn die Maus gedrückt wird und wie Hustbär sagte nur abspielen wenn der sound nicht gerade gespielt wird.

    Optimalerweise ist der Sound nur so lang wie dein Block des Mausinputs.



  • Danke euch beiden für die Antworten, aber wie mache ich mir einen Timer? Hab mich damit eigentlich noch nie so richtig beschäftigt.



  • MrBambi schrieb:

    Danke euch beiden für die Antworten, aber wie mache ich mir einen Timer? Hab mich damit eigentlich noch nie so richtig beschäftigt.

    Das ist etwas grundlegendes, das du dringend lernen solltest. Ohne Timer wird dein Spiel auf jedem System in einer anderen Geschwindigkeit laufen und FPS begrenzen damit es gleich schnell läuft, ist eine schlechte Idee.

    Hier die SFML Doku:
    http://www.sfml-dev.org/tutorials/2.0/system-time.php


Log in to reply