schleife unendlich ?

  • GM 6

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

  • schleife unendlich ?

    Tach,

    Es kann sein, dass es dieses Thema schon oft gab, aber die SuFu hat nichts konkretes ausgespuckt. (Falls es als Doppelpost gilt, löschen)

    Also, mein Problem ist, dass ich aus einer Schleife eine Unendlichschleife machen möchte, die etwa 30 Arrays, also in dem Fall extern-aufgerufene Sounds, nacheinander anspielt, und dann das ganze endlos wiederholt. ist siwas eigentlich überhaupt möglich?
  • Tja, wenn Endlosschleifen nicht möglichen wären, dann hätte
    ich beim proggen sehr selten den Task-Manager gebraucht
    :D
    Mach einfach folgendes:

    GML-Quellcode

    1. for (i=0;(i<30)&&(weiter==true);i+=1)
    2. {
    3. sound_play(musics[i]); //sound spielen
    4. if (i==29) //macht die Schleife endlos
    5. i=0;
    6. }


    Ich hab mal noch eine weitere Abbruchvariable reingemacht ("weiter"), falls du irgendwann doch die Schleife beenden möchtest.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • hmmm... ne endlosschleife?!

    Möglichkeit a:

    GML-Quellcode

    1. a=0;
    2. whila(a!=1)
    3. {
    4. //das was passieren soll...
    5. //da a nie auf 1 gesetzt wird ist das eine endlosschleife
    6. }



    Möglichkeit b:

    GML-Quellcode

    1. a=0;
    2. do
    3. {
    4. //wird solange ausgeführt bis a=1 ist, was aber nie passiert -> endlosschleife
    5. //das was passieren soll
    6. } until (a=1)


    Da gibt es bestimmt noch was...
    Aber mal ne Frage:
    Wofür brauchst du ne endlosschleife??
    Das Spiel bleibt ja solange stehen, bis die Schleife zu Ende ist, was ja nicht passiert...


    €dit:
    @Spellmaker: warum (weiter==true)??

    Man ich sollte besser lesen
  • Wie wärs mal ohne Variablen?

    GML-Quellcode

    1. while(true)
    2. {
    3. //Something
    4. };


    Ich würde dir aber davon abraten, weil gewöhnlicherweise, wenn man die Endlosschleifen falsch einbaut, das deinen PC extrem verlangsamt und du wahrscheinlich neustarten musst, weil gar nichts mehr geht. ;)
    Das was du suchst ist keine Endlosschleife, weil er sich sonst NUR auf das abspielen der Sounds konzentriert und nichts anderes. Geh doch einfach ne for-schleife durch und spiel die Sounds ab!

    GML-Quellcode

    1. for(i=0; i<30; i++)
    2. sound_play(array[i]);


    Edit: Und das natürlich ins Step Event, damit das immer ausgeführt wird ;)
  • Tach,

    Da das mit der Endlosschleife nicht ganz hinaut, wie ich es vermutet hätte, habe ich mir mal eine Theorie überlegt.

    GML-Quellcode

    1. ... // Die Arrays
    2. snd_music = sound_play(snd[ran(30)]);
    3. if !sound_isplaying(snd_music) then
    4. { snd_music = sound_play(snd[ran(30)]);}

    Wenn es klappt, schiebe ich das in den Gelöste Fragen - Bereich
  • Also, ich höre praktisch nur geknarksel und mein PC hängt sich halb auf. Wenn ich doch mal einen vernünftigen Sound hören sollte, dann wird der nächste NICHT abgespielt :(. Weiss echt nich mehr was ich machen soll (bin heute ziemlich durch den Wind)

    @ Janji
    Wie meinst du das mit den Alarm events? Hört sich ja nicht schlecht an...
  • Erstmal danke, aber ist nicht unbedingt das, was ich brauche.

    Also, ich hab meinen Sound-Ladecode im Create so aufgebaut:

    GML-Quellcode

    1. preload = false;
    2. //Pfäde
    3. snd[0] = "music\Titel.mp3";
    4. snd[1] = "music\NewStories.mp3";
    5. snd_track = sound_add(snd[round(random(1))],1,0);
    6. sound_volume(snd_track,90);
    7. sound_play(snd_track);
    8. if !sound_isplaying(snd_track) then
    9. sound_replace(snd_track, snd[round(random(1))],3,false);
    10. sound_play(snd_track);
    Alles anzeigen


    Klappt ja auch wunderbar, nur der erste Track wird abgespielt, der zweite nicht. Bin echt am verzweifeln
  • ich denke, dass die soundauswahl nicht funktioniet.
    nach diesem code..

    GML-Quellcode

    1. // Sound als Ressource hinzufügen
    2. snd_track = sound_add(snd[round[random(1))],1,0);
    3. // Sound Abspielen
    4. sound_volume(snd_track,90);
    5. sound_play(snd_track);
    6. if !sound_isplaying(snd_track) then
    7. {
    8. sound_replace(snd_track,snd[round(random(1))],3,false);
    9. sound_play(snd_track);
    10. }
    Alles anzeigen

    wird eine variable erstellt, die sich auf das array snd[n] bezieht. jedoch sind die klammern nicht ganz richtig. so sound_add(snd[round(random(1))],1,0); sollte es richtig sein.
    danach wird der sound abgespielt und abgefragt, ob der ausgewählte sound nicht spielt - was allerdings immer der fall sein müsste, da das script noch nicht abgelaufen ist und der sound noch nicht gestartet worden laufen sollte. also wird der bedingte code ausgeführt, welcher besagt, das wiederum ein neuer sound geladen (diesmal aus irgendeinem Grund mit anderen Einstellungen) und abgespielt wird.

    vielleicht solltest du die sounds einfach per sound_add in das array laden und dann in der Auswahlfunktion zu verwenden. für eben diese solltest du aber nicht den befehl sound_isplaying verwenden, weil im selben step der sound noch nicht läuft.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Außerdem wäre für solche Fälle floor(random(2)) besser als round(random(1)).
    Warum? Weil gerundet würde bedeuten, dass der erste bzw. letzte Sound nur halb so viel Wahrscheinlichkeit hat, abgespielt zu werden, als die anderen. ( 3 Sounds: 0-0.5, 0.5-1.5, 1.5-2 = Erste und letzte haben 0.5, das in der Mitte 1 Unterschied )
  • @ WIN

    Das heisst, wenn ich das richtig verstanden habe, dann soll ich das so machen:

    GML-Quellcode

    1. track1 = "music\Track1"
    2. track2 = "music\Track2"
    3. ... // usw
    4. snd[0] = sound_add(track1,1,0);
    5. snd[1] = sound_add(track2,1,0);
    6. ... // usw
    7. sound_play(snd[floor(random(x))]);


    Und das ganze dann ins Step event packen??? (Bin heute ja schon wieder so durch den Wind)
  • ich würde das nicht in den step event packen. das würde bedeuten, das jeden step (ca. 30 die sekunde) die sounds in das array geladen werden und versucht wird einer davon abzuspielen. das hätte zur folge, das kein sound abgespielt wird und nach wenigen augeblicken der arbeitsspeicher voll wäre.

    pack das in den create event und rufe, um den sound zu wechseln einen alarm im selben objekt auf, der den sound auswählt. im alarm selber kannst du die zeit definieren, wann dieser wieder aufgerufen werden soll.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • HHD - Schnotter, du kannst es nciht. Hör auf mit dem GM zu arbeiten, dass können nur Profis wie ICH (und da ja sonst keiner hier ausser ich Profi ist, werden auch alle mit dem GM zu arbeiten aufhören müssen.=)

    //Edit by Kilik:
    //Don't feed the Troll, User wurde gebannt!
  • Benutzer online 1

    1 Besucher