Ton nur ein einziges Mal abspielen

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ton nur ein einziges Mal abspielen

    Hi :)

    Ich hab jetzt 10 Minuten lang Google bemüht und auch auf yoyogames.com hab ich nichts gefunden, was mir hilft. Die schreiben alle von was anderem. :/

    Ich experimentiere gerade mit Tönen und bekomme es einfach nicht hin, dass ein Ton nur ein einziges Mal abgespielt wird. Es geht darum, dass ich ein Nachrichtensystem mit draw_text bastle und ich möchte, dass bei jeder aufpoppenden Nachricht ein kurzer Ton kommt.

    Dass der Ton unendlich oft abgespielt wird, wenn man sound_play(); im Draw Event ausführt, hab ich verstanden (das Draw Event passiert so oft wie das Step Event), aber ich hab auch schon versucht, es mit Alarmen zu machen. Dann wird der Alarm unendlich oft ausgelöst. :( Ich möchte aber, dass der Ton (eine .wav Datei übrigens) einfach nur bis zum Schluss abgespielt wird und dann nicht nochmal (bis die nächste Meldung auftaucht).

    GML-Quellcode

    1. Draw Event:
    2. if countdown >= 3*second && countdown <= 20*second
    3. { sound_play(snd_message);
    4. draw_text (10, 10, "Willkommen! :)");}


    funktioniert genau so wenig wie:

    GML-Quellcode

    1. Draw Event:
    2. if countdown >= 3*second && countdown <= 20*second{
    3. alarm[0] = 1;
    4. draw_text (10, 10, "Willkommen! :)");}


    GML-Quellcode

    1. Alarm 0:
    2. sound_play(snd_message);


    Bei beidem wird der Ton unendlich oft abgespielt. :(

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bonsaiheld ()

  • Du kannst sound_isplaying benutzen um zu prüfen ob der Sound gerade spielt, um den Sound nur einmal abzuspielen kannst du folgenden Code benutzen:

    GML-Quellcode

    1. //Create-Event
    2. playsound=true; //true = darf sound abspielen
    3. //Nachricht "poppt" auf:
    4. if (!playsound) {//sound spielt vielleicht schon
    5. playsound=!sound_isplaying(snd_message); //wenn sound nicht spiel = dürfen wir den sound wieder abspielen
    6. }
    7. if (playsound) {
    8. sound_play(snd_message);
    9. playsound=false;
    10. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Hmm... Das bewirkt, dass der Ton unendlich, aber nur einmal die Sekunde
    abgespielt wird und dann nach ein paar Sekunden sehr schnell und
    unendlich.
    sound_isplaying hat laut GM 6.1 Hilfe die Eigenschaft erst "auszuschlagen" wenn auch der Sound wirklich aus den Lautsprechern kommt.

    Du darfst den Code nur dann einmal ausführen wenn eine neue Nachricht aufpoppt. (Hier hilft möglicherweiße wieder eine zweite Variable oder so etwas).
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Ich kriegs nicht hin. :/

    Ich hab mehrere Varianten probiert, diese hier schien mir am sinnvollsten, wenn es darum geht, Dinge nur einmal auszuführen

    GML-Quellcode

    1. Create Event
    2. playsound=true; //true = darf sound abspielen
    3. //Nachricht "poppt" auf:
    4. if (!playsound) { //sound spielt vielleicht schon
    5. playsound=!sound_isplaying(snd_message);
    6. //wenn sound nicht spiel = dürfen wir den sound wieder abspielen
    7. }
    8. if (playsound) { sound_play(snd_message); playsound=false;}


    GML-Quellcode

    1. Draw Eventif countdown >= 3*second && countdown <= 20*second{ alarm[0] = 0; draw_text (10, 10, "Willkommen bei meinem Neuaufbau von War Wind! :)");}


    GML-Quellcode

    1. Alarm 0sound_play(snd_message); (auch mit "playsound = true" keine Wirkung).


    (oh man, GML hier zu formatieren ist echt ein Krampf :cursing: )

    EDIT: Hier, ich lad dir mal meine Datei hoch: file-upload.net/download-6816815/RTS.gm81.html
    Objects ---> setup ---> hud ---> obj_message_system

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }
  • Hast du auch den Code der unter "Create-Event" steht auch ins Create-Event getan? Sonst kommt es eben dazu das du immer wieder die "Erlaubnis" setzts den Sound abzuspielen.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von henrik1235 ()

  • :event_draw:

    GML-Quellcode

    1. if (alarm[0] == -1)
    2. {
    3. alarm[0] = 0.1;
    4. }


    :event_timer: 0

    GML-Quellcode

    1. sound_play(sound);


    Vorher muss natürlich noch gecheckt werden, ob da eine neue Nachricht ist. Ständiges wiederhohlen im Drawevent diesen Codes würde den Sound auch einfach nur wiederhohlen.
    :thumbsup:
  • Hmm... So ganz versteh ich das nicht. In wie fern unterscheidet sich das denn von dem hier?

    Wenn ich den Code ins Draw Event einbaue, wird der Ton nur wiederholt, wie du schon geschrieben hast. In welchem Event soll ich den prüfen, wenn nicht im Draw Event, in welchem der Text-Code schließlich steckt? Aber wenn ich dort prüfe, gibts nur Wiederholungen. :huh:

    In meinem Fall ist die Zeit der Anzeige der Nachrichten mit einem einfachen Step-Counter realisiert. Der Counter zählt 1 pro Step hoch, also 30 pro Sekunde, und die Nachrichten erscheinen dann nach einer mit "if counter >= zahl (z.B. 150 für nach 5 Sekunden)" angegebenen Dauer. Wie würde ich das denn da machen?

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }
  • Du machst zwei Variablen lastMessage und currentMessage.
    Jedes Mal wenn du eine Nachricht anzeige lässt schreibst du currentMessage="Derzeitig Message" oder einfach ne Zahl die für jede Nachricht steht. Nun kommt der folgende Code hinzu:

    GML-Quellcode

    1. if (lastMessage!=currentMessage && !sound_isplaying(snd_message)) {
    2. sound_play(snd_message);
    3. lastMessage=currentMessage;
    4. }


    Wenn lastmessage!=currentMessage true ist dann gibt es eine neue Nachricht, danach wird geprüft ob der Sound nicht schon spielt (damit der Sound nicht während er gerade läuft abgespielt, wenn du wilst das sich die Sounds überlagern dann lass die Abfrage weg.

    Danach wird der Sound abgespielt und lastMessage=currentMessage. Damit wird die erste Bedienung nicht mehr erfüllt und erst auch dann wieder wenn eine neue Nachricht (wenn currentMessage einen neuen Wert annimmt).
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Benutzer online 1

    1 Besucher