Musik wird beim Spiel laden nicht mehr abgespielt

  • GM 7

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

  • Musik wird beim Spiel laden nicht mehr abgespielt

    Hallo zusammen!

    Wenn ich bei mir im Spiel das Spiel speicher und dann lade, wird die Musik nicht abgespielt. Für die Musik verwende ich Audiere, da ich XM Sounds benutze. Ich habe es so eingestellt, dass er in jedem Level das entsprechende Lied abspielt, etwa so:

    GML-Quellcode

    1. if global.kapitel1 = false{
    2. global.kapitel01snd = audiere_load("Data/Music/Kapitel01.xm");
    3. audiere_set_repeat(global.kapitel01snd,true);
    4. audiere_set_volume(global.kapitel01snd,1);
    5. audiere_play(global.kapitel01snd);
    6. global.kapitel1 = true;
    7. }


    Wenn ich ein neues Spiel starte, funktioniert das perfekt. Ich kann auch in den Räumen hin und her blättern, raus ins Menü, wieder in das Spiel rein und er spielt zu jeder Zeit das richtige Lied ab. Natürlich setze ich im Menü global.kapitel1 auf false.

    Wenn das Spiel geladen wird, wird vorher extra global.kapitel1 auf false gesetzt. Erst dachte ich, er Spielt die Musik nicht ab weil die Soundeinstellungen im Create Event sind, also habe ich es mal in Step rein, aber Pustekuchen. Eine gescheite Fehlermeldung erhalte ich auch nicht. Wenn ich das Spiel lade kommt einfach keine Musik, will ich mit Esc raus bricht er alles ab, Spiel hängt sich also auf, weil mit Esc folgendes gemacht wird:

    GML-Quellcode

    1. if global.kapitel1 = true{
    2. audiere_stop(global.kapitel01snd);
    3. audiere_unload(global.kapitel01snd);
    4. }


    Ich nehme an, dass der Absturz daher kommt, dass er kein Lied geladen hat. Warum das so ist, ist mir ein Rätsel. :cursing: ?( :cursing:

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

  • Meine Erklärung wäre folgende:

    Wenn du das Spiel speicherst, dann ist ja global.kapitel1 auf true.
    Wenn du es vor dem Laden auf false setzt, bringt das gar nichts, weil der dann wieder lädt und global.kapitel1 auf true setzt.

    Also wird kein Sound abgespielt, aber bei ESC hast du die Probleme.
    Du kannst dir ja mal zum testen global.kapitel1 drawen lassen, und schaun ob es wirklich so ist.

    Falls ich recht habe, versuch mal vor dem speichern die Variable auf false zu setzen.
    Dann speichern.

    Ich hoffe ich konnte helfen. ;)
  • Ich habe es jetzt mal so gemacht:

    GML-Quellcode

    1. raum = room_get_name(room);
    2. filename = get_save_filename("Save files|*.sgs", "Savegames\" + raum + "") + ".sgs"
    3. if filename <> ""
    4. {
    5. global.kapitel1 = false;
    6. game_save(filename)
    7. }


    Ergebnis: Nach dem speichern spielt er das Lied doppelt ab, wenn ich neu starte und den Spielstand lade, ist es wieder stumm. :(
  • Mit dem Sound laden ist es so, dass ich für jedes Kapitel (10 Level pro Kapitel) ein Objekt habe, welcher die Musik steuert. Ich hatte das mal im Kontrollobjekt, aber irgendwie fing es an zu wuchern. Irgend wie will der Sound nach dem laden nicht mehr. Ich dachte auch mal, dass es an Audiere liegen könnte und habe vor dem laden Audiere beendet und anschließend neu gestartet, aber ohne Erfolg. :headtouch:
  • ups... habe den Hinweis von dir oben ganz übersehen.

    Also, global.kapitel1 ist auf 0, wenn ich einen Spielstand geladen habe. Ich habe mal im Objekt, wo der Sound abgespielt wird, im Step Event global.kapitel1 = true; eingegeben, hat aber nichts gebracht. Er steht zwar auf 1, aber spielt keinen Sound ab.

    Das ganze hat mich aber auf eine Idee gebracht. Den Soundstarter setze ich in den Step. Der Code sieht momentan so aus:

    GML-Quellcode

    1. // Falls die Musik von Kapitel 2 läuft, wird sie gestoppt und gelöscht
    2. if global.kapitel2 = true{
    3. audiere_stop(global.kapitel02snd);
    4. audiere_unload(global.kapitel02snd);
    5. global.kapitel2 = false;
    6. }
    7. if global.kapitel1 = false{
    8. global.kapitel01snd = audiere_load("Data/Music/Kapitel01.xm");
    9. audiere_set_repeat(global.kapitel01snd,true);
    10. audiere_set_volume(global.kapitel01snd,1);
    11. audiere_play(global.kapitel01snd);
    12. global.kapitel1 = true;
    13. }
    Alles anzeigen


    Das Speichern läuft so:

    GML-Quellcode

    1. raum = room_get_name(room);
    2. filename = get_save_filename("Save files|*.sgs", "Savegames\" + raum + "") + ".sgs"
    3. if filename <> ""
    4. {
    5. if global.kapitel1 = true{
    6. audiere_stop(global.kapitel01snd);
    7. audiere_unload(global.kapitel01snd);
    8. global.kapitel1 = false;
    9. }
    10. if global.kapitel2 = true{
    11. audiere_stop(global.kapitel02snd);
    12. audiere_unload(global.kapitel02snd);
    13. global.kapitel2 = false;
    14. }
    15. game_save(filename)
    16. }
    Alles anzeigen


    Neu ist hier die Abfrage, ob der entsprechende Sound überhaupt an ist. Wenn ja, wird er komplett gelöscht. Das Laden geht wie gewohnt:

    GML-Quellcode

    1. global.savename = get_open_filename("Save files|*.sgs", "Savegames\*.sgs")
    2. if file_exists(global.savename)
    3. {
    4. global.loadgame = true;
    5. room_goto(Initialisierung);
    6. }


    Nachteil: wenn man gespeichert hat, beginnt die Musik von vorne. Ist aber nicht schlimm, weil es eh ein unendlicher Loop ist. Dafür scheint der Rest gut zu funktionieren.

    Vielen Dank Basti! :thumbsup:

    Edit: Zur Erklärung, warum das Laden über den Raum Initialisierung geht. Viele externe Dateien werden erst hier geladen und nicht schon beim Spielstart. Wenn ich also einen Spielstand lade, schicke ich den Spieler mit der gewählten Datei global.savename an den Start. Hier wird alles neu geladen und erst anschließend das Savegame.