Variable für Musik-Playlist schaltet nicht weiter?

  • GM 8

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

  • Variable für Musik-Playlist schaltet nicht weiter?

    Hallo Leute;

    ich habe mehrere Musikstücke, die in den verschiedenen Räumen abgespielt werden sollen. 1x Menü, 4x Level und 1x Highscore
    im menü wird meine globale Variable auf 0 gestellt und die Menümusik abgespielt. Drückt man auf Play wird FALLS vmusic 0 ist music4 abgespielt und das Level gestartet.
    Soweit so gut.
    Jetzt sollte mein "player" eigentlich die Musikstücke automatisch weiterschalten wenn das vorherige aus ist und die variable vmusic auch weiterschalten, der Code sieht so aus:

    GML-Quellcode

    1. if vmusic = 1
    2. {
    3. if sound_isplaying(global.music4) = false
    4. {
    5. sound_play(global.music1)
    6. vmusic = 2
    7. }
    8. }
    9. if vmusic = 2
    10. {
    11. if sound_isplaying(global.music1) = false
    12. {
    13. sound_play(global.music2)
    14. vmusic = 3
    15. }
    16. }
    17. if vmusic = 3
    18. {
    19. if sound_isplaying(global.music2) = false
    20. {
    21. sound_play(global.music3)
    22. vmusic = 4
    23. }
    24. }
    25. if vmusic = 4
    26. {
    27. if sound_isplaying(global.music3) = false
    28. {
    29. sound_play(global.music4)
    30. vmusic = 1
    31. }
    32. }
    Alles anzeigen


    Aber er bleibt bei vmusic = 1 hängen wenn music4 (das erste Stück) fertig ist. Dann spielt er die erste Sekunde des nächsten Stückes andauernd nur an. Und macht nichts weiter. vmusic bleibt 1 und wird auch von nichts anderem beeinflusst. Das ganze steckt im Step Event meines peristenten Controller Objekts.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • setz mal hinter
    vmusik = 1,
    vmusik = 2
    usw...
    immer ein exit,
    damit er den Code verlässt.
    Dann müsste es gehen....
    Aber keine Garantie!
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Also ich würde den Code einfacher gestalten.

    GML-Quellcode

    1. if (vmusic == 1 && !sound_isplaying(global.music4)) {
    2. sound_play(global.music1);
    3. vmusic = 2;}


    Vllt. klappt's dann ja.
  • Nope exit, bringt leider nix.

    ich hab ihm das jetzt in ein Alarm Event gegeben dass sich selbst alle 30 steps aufruft.

    Spoiler anzeigen

    GML-Quellcode

    1. alarm[0] = 30
    2. if vmusic = 1
    3. {
    4. if not sound_isplaying(global.music4)
    5. {
    6. if not sound_isplaying(global.music1)
    7. {
    8. sound_play(global.music1)
    9. vmusic = 2
    10. }
    11. }
    12. }
    13. if vmusic = 2
    14. {
    15. if not sound_isplaying(global.music1)
    16. {
    17. if not sound_isplaying(global.music2)
    18. {
    19. sound_play(global.music2)
    20. vmusic = 3
    21. }
    22. }
    23. }
    24. if vmusic = 3
    25. {
    26. if not sound_isplaying(global.music2)
    27. {
    28. if not sound_isplaying(global.music3)
    29. {
    30. sound_play(global.music3)
    31. vmusic = 4
    32. }
    33. }
    34. }
    35. if vmusic = 4
    36. {
    37. if not sound_isplaying(global.music3)
    38. {
    39. if not sound_isplaying(global.music4)
    40. {
    41. sound_play(global.music4)
    42. vmusic = 1
    43. }
    44. }
    45. }
    Alles anzeigen


    Jetzt spielt er das erste Lied korrekt beim betreten des Levels ab, spielt nachdems aus ist das zweite Lied ab ABER auch das erste nocheinmal. Ich habe ihm keinen Loop programmiert. Auch die Variable vmusic stellt er nicht auf 2. Aber wenn er music1 abspielen kann weils da steht, dann sollte er in der selben klammer auch vmusic auf 2 stellen können....sollte man meinen.

    Jetzt ist mein Code ziemlich kompliziert geworden. Kennt jemand eine andere Lösung für das Problem, vielleicht mit einer Schleife, for oder case Sache?



    GML-Quellcode

    1. alarm[0] = 30
    2. if (vmusic == 1 && !sound_isplaying(global.music4))
    3. {
    4. sound_play(global.music1);
    5. vmusic = 2;
    6. }
    7. if (vmusic == 2 && !sound_isplaying(global.music1))
    8. {
    9. sound_play(global.music2);
    10. vmusic = 3;
    11. }
    12. if (vmusic == 3 && !sound_isplaying(global.music2))
    13. {
    14. sound_play(global.music3);
    15. vmusic = 4;
    16. }
    17. if (vmusic == 4 && !sound_isplaying(global.music3))
    18. {
    19. sound_play(global.music4);
    20. vmusic = 1;
    21. }
    Alles anzeigen


    In der kurz Form siehts gleich viel beeser aus, danke dafür aber jetzt springt er nach dem Menü sofort auf vmusic 4 und spielt nur das 4te Lied ab und bleibt dann stumm. Auch wenn das 4te Lied abgespielt wird soll er eigtl die Variable auf 1 schalten...

    Jetzt spielt er das erste Lied korrekt beim betreten des Levels ab,
    spielt nachdems aus ist das zweite Lied ab ABER auch das erste
    nocheinmal. Ich habe ihm keinen Loop programmiert. Auch die Variable
    vmusic stellt er nicht auf 2. Aber wenn er music1 abspielen kann weils
    da steht, dann sollte er in der selben klammer auch vmusic auf 2 stellen
    können....sollte man meinen. Wie im Spoiler erwähnt hab ich wieder das selbe Problem.

    Kann es sein dass er mit der isplaying funktion trotzdem nicht versteht ob das Lied jetzt läuft oder nicht?! Die Funktion ist ja ganzt anscheinend auch noch langsam, da ich 30 steps statt einem nehmen "musste" was eigtl eh besser für die performance ist.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Aku_Ryou ()

  • ich werde heute abend nochmal das ganze mit alarm -1 und der playlist in einem Event probieren.

    Ich habe jetzt für jedes Lied ein eigenes AlarmEvent gemacht und lasse die sekundenzeit*30 des Liedes warten bis der nächste alarm getriggert wird der dann das andere Stück inne hat und wiederrum den nächsten Alarm auf die eigene Liedzeit stellt.

    Es funktioniert aber nicht, ich habe mich auch sicher nicht verrechnet. 3minuten langes lied > 5400 steps bis dann der nächste alarm getriggert wird und seine musik abspielt. außerdem soll vmusic weitergestellt werden damit ich im Debug modus sehe in welchen Alarm Event er jetzt ist. Er ist im richtigen Event, aber diesmal will er nur die Menümusik durchlaufen lassen auch wenn ich schon ins level gehe. wenn ich im ersten alarm sound stop musik menü drinnen hab ändert das auf wundersame art und weise auch nichts.

    Ich packs nicht, ich hab keine Ahnung woher die Fehler kommen. Ich habe es schon so simpel wie möglich gemacht.

    GML-Quellcode

    1. spiel menü musik ab
    2. wenn klick auf play dann vmusik = 1 und alarm1 = 1
    3. alarm1: wenn vmusic ist 1 dann play musik1 und setz alarm2 auf 5400 stop musik menü
    4. alarm2: play musik2 setze alarm3 auf etc etc etc


    fairer weise soll er das nur tun wenn vmusik nicht 7 ist also die highscore musik an ist. Aber so gehts anscheinend nicht.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Aku_Ryou schrieb:

    ich werde heute abend nochmal das ganze mit alarm -1 und der playlist in einem Event probieren.

    Ich habe jetzt für jedes Lied ein eigenes AlarmEvent gemacht und lasse die sekundenzeit*30 des Liedes warten bis der nächste alarm getriggert wird der dann das andere Stück inne hat und wiederrum den nächsten Alarm auf die eigene Liedzeit stellt.

    Es funktioniert aber nicht, ich habe mich auch sicher nicht verrechnet. 3minuten langes lied > 5400 steps bis dann der nächste alarm getriggert wird und seine musik abspielt. außerdem soll vmusic weitergestellt werden damit ich im Debug modus sehe in welchen Alarm Event er jetzt ist. Er ist im richtigen Event, aber diesmal will er nur die Menümusik durchlaufen lassen auch wenn ich schon ins level gehe. wenn ich im ersten alarm sound stop musik menü drinnen hab ändert das auf wundersame art und weise auch nichts.

    Ich packs nicht, ich hab keine Ahnung woher die Fehler kommen. Ich habe es schon so simpel wie möglich gemacht.

    GML-Quellcode

    1. spiel menü musik ab
    2. wenn klick auf play dann vmusik = 1 und alarm1 = 1
    3. alarm1: wenn vmusic ist 1 dann play musik1 und setz alarm2 auf 5400 stop musik menü
    4. alarm2: play musik2 setze alarm3 auf etc etc etc


    fairer weise soll er das nur tun wenn vmusik nicht 7 ist also die highscore musik an ist. Aber so gehts anscheinend nicht.
    Ist nicht direkt eine Lösung, aber ein kleiner Tipp.. du kannst für die Berechnung eines 3 Minuten liedes auch einfach 180*room_speed benutzen, das ist ein wenig übersichtlicher :)

    MfG Yivo
  • Es handelt sich hierbei wieder mal um einen Interessenskonflikt zwischen User und Step-Event.

    Du willst, dass die Musikstücke nacheinander abgespielt werden.

    Es ist logisch, dass im Step-Event immer nur die ersten Sekunden abgespielt werden, da die Bedingung erfüllt ist, den Sound abzuspielen. Und da das Step-Event ständig den Code wiederholt - Main-Loop -, wird das Stück auch ständig wiederholt.

    Ich guck gleich mal, ob es nicht eine eigens entwickelte Funktion hierfür gibt.


    //EDIT
    Es gibt keine vorgegebene Funktion für das. Aber das muss doch irgendwie möglich sein, rein im Step-Event.
    Ich überleg auch ma ne Runde. :pinch:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Michaelp800 ()

  • Das was mich verwundert ist, dass ich wenn ich nur ein lied habe und keine Playlist funktioniert es wunderbar. Im Menü oder im highscore bereich spielt nur ein Lied und vmusic hat in diesem Room auch nur einen bestimmten wert und unterbindet somit entweder das abspielen der menümusik oder der highscore musik. Aber es wäre langweilig nur eine Musik im Level Room zu haben. Und ich will verhindern dass die Musik abbricht und (als anderes lied) neustartet jedesmal wenn man den Levelroom nach dem Shoproom (wo die musik weiterläuft) neu betritt.

    Ich bau das jetzt nochmal ganz simpel gehalten von vorne auf mit nur einem musikstück und versuche dann eine "playlist" einzubinden. Vielleicht finde ich so einen Fehler oder was dem GM an der Variable nicht schmeckt.


    So...hab das mal alles wegeditiert. Ich habe jetzt einen ganz anderen Ansatz verfolgt. Der Code ist wieder im Step Event und checkt den Room ab in dem man grade ist. mit 3 Musikstücken gehts im Moment. Das sieht dann so aus, falls es jemand brauchen kann :)

    GML-Quellcode

    1. if (room = menu)
    2. {
    3. if vmusic = 0
    4. {
    5. vmusic = 1
    6. sound_play(global.musicmenu)
    7. }
    8. }
    9. if (room = Levels)
    10. {
    11. if vmusic = 1
    12. {
    13. vmusic = 2
    14. sound_play(global.music1)
    15. }
    16. }
    17. if (room = gameover)
    18. {
    19. if vmusic = 2
    20. {
    21. vmusic = 0
    22. sound_play(global.musichigh)
    23. }
    24. }
    Alles anzeigen


    Die Playlist im Room Level wird nun die kleine herausforderung werden und das ist ja eigtl die ganze zeit der punkt...

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Aku_Ryou () aus folgendem Grund: bin ein idiot...^^

  • So, nach einiges weiteren verhauenen Anläufen hat Google mein Problem gelöst. leider, eigtl wollte ich alles möglichst selber machen...

    Also das hier sind einige Scripts die einen art Player im Spiel möglich machen. Ohne DLLs nur mit Scripts!
    gmc.yoyogames.com/index.php?showtopic=435587

    Das konnte ich mit meiner bisherigen methode gut kombinieren und habe nun alles in einem Step Event und gottseidank in einem einzigen Object das alles an audio steuert :)

    Ich hoffe das kann euch auch einmal hilfreich sein

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)