Musik startet trotz Abfrage 2x!

  • GM 8
  • Musik startet trotz Abfrage 2x!

    Hallo!

    Ich habe ein kleines Problem(-chen). Nämlich habe ich 2 Variablen, draw_question & draw_gameover. Wenn eine der beiden auf true steht, wird das jeweilige im Controller-Objekt gezeichnet, also entweder die Frage oder der "Game-Over" Schirm.

    Gezeichnet wird das ganze natürlich im Draw-Event, und im Step-Event wird dann überprüft, ob auf den Button geklickt wird/wurde, und dementsprechend Reagiert. Sobald eine dieser Variablen auf true steht, wird der jeweilige Sound abgespielt. Bei einem klick auf den Button, hört dieser sofort auf.

    Allerdings wird der SOund trotz abfrage 2x mit wenigen Millisekunden verzögerung gestartet, ich vermute, der Step ist schneller vorbei, als die Funktion is_playing() das ganze überprüfen kann.

    obj_controller - :event_step:

    GML-Quellcode

    1. if (draw_gameover) /* ODER */ if (draw_question)
    2. {
    3. if (!sound_isplaying(snd_hintergrund))
    4. {
    5. sound_play(snd_hintergrund);
    6. }
    7. if (mouse_x > room_width/2-200 and mouse_x < room_width/2+75 and mouse_y > room_height/4+125 and mouse_y < room_height/4+175 and mouse_check_button(mb_left))
    8. {
    9. sound_stop(snd_hintergrund);
    10. draw_gameover = false; /* ODER */ draw_question = false;
    11. instance_create(x+1,y+1,next_object);
    12. }
    13. }
    Alles anzeigen


    Ich habe mir überlegt, wenn eine der Variablen auf true steht, einen Alarm auszulösen (in weniger als 2 Steps), der den Sound abspielt.
    Die andere Methode wäre halt, mit einer Variable zu arbeiten, und das in jedem Step zu prüfen.

    Also meine Frage: Brauche ich eine extra Variable oder ein Alarm, nur um dieses Problem(-chen) zu lösen?
    Danke an alle!
    :thumbsup:
  • Dein Problem steht auch in der GM Hilfe drin. Die Funktion sound_isplaying gibt quasi nur zurück ob der Sound grad von den Lautsprechern schon abgespielt wird. Dies geschieht aber erst mit einer kleinen Verzögerung nach dem aufrufen der play-Funktion!
    Also musst du das wohl über eine eigene Variable lösen.

    Also in etwa

    GML-Quellcode

    1. if background_started = 0
    2. {
    3. background_started = 1;
    4. sound_play(snd_hintergrund);
    5. }

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Zusatz zu DragonGamers Beitrag:
    sound_isplaying ist total träge.
    Wenn du aber genau wissen möchtest, wann die Musik zuende ist, kannst du auch einen Timer verwenden.
    Direkte Timer gibt es nicht in Game Maker, richtig! Doch das System hat doch eine ziehmlich genauen Timer.

    Quellcode

    1. current_time

    Dort wird die Zeit des Systems seit Systemstart in Millisekunden angezeigt.
    Du kannst also die Musik abspielen, den aktuellen Wert des Timers speichern und
    weiterzählen lassen. Die Differenz ist dann die Zeit ab begin der Musik.
    Du kannst dir dann ansehen, wie lang diese Musik geht, und dann in ms Genauigkeit die Variable "background_started" wieder auf 0 stellen.