Sleep ersetzen

  • Allgemein

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

  • Sleep ersetzen

    Hallo,

    ich habe ein problem mit GM Sudio und zwar möchte ich, dass wenn man stirbt das Spiel noch eine halbe Sekunde weiter läuft (das mache ich mit "alarm"). So und dann wollte ich eigentlich das Spiel für eine kurze Zeit sleepen lassen, damit man sieht, wo man hängen geblieben ist.
    Wie löse ich das jetzt, denn alle Objekte sollten an dem Platz bleiben wo sie sind und dass geht denke ich nur mit sleep.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Nimm notfalls:

    GML-Quellcode

    1. Var t;
    2. t=current_time
    3. while(current_time<t+argument0){}
    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

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

  • GML-Quellcode

    1. var t;
    2. t=current_time + argument0; //Endzeit setzen
    3. while(current_time < t) { } //warten bis Endzeit erreicht ist


    Speichern als Skript "sleep" und Einsatz dann durch

    GML-Quellcode

    1. sleep(1000); //1000 ms schlafen


    Das Problem ist das der GameMaker daduch eine Endlosschleife erzeugt und damit den größten Teil vom Prozessor für nichts beansprucht (andere Anwendungen kommen daher nicht mehr so oft an den Zug) und das System kann langsam bis zum völligen Stillstand kommen.

    Alternativ (bessere Methode) kannst du den View in eine Surface zeichnen und diese dann anzeigen oder eine Variable einbauen die verhindert das die Objekte sich irgendwie bewegen (einfachrer, aber viel Arbeit).
    Thread dazu: gm-d.de/wbb/index.php/Thread/21656/.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Larsi, teste deine Codes bitte und poste sie nicht einfach. Deine while-Schleife findet in keinem denkbaren Fall statt, weil du pro Step "current_time>current_time+(irgendwas, wahrscheinlich >0)" abfragst. x ist nunmal nicht größer oder kleiner als x, sondern x.

    Dufner: Ich empfehle dir henriks Ratschläge - entweder die Lösung über eine stille Surface (die Sache mit der Endlosschleife würde ich mir sparen, das ist schlechter Stil), oder - und das ist meine persönliche Empfehlung - das Benutzen einer globalen Pause-flag. Das ist ein bisschen mehr Codegefrickel, weil du in jedem Step-Event sagen musst "Wenn diese flag true ist, führ das Event oder Teile davon nicht aus" (das entsprechende Schlüsselwort im Code heißt exit), gibt dir aber mehr Kontrolle darüber, was während dem Pause-Status passieren soll - z.B. könnten Hintergrundeffekte und Sprite-Animationen weiterlaufen, während nur die Spielfiguren selbst anhalten.
    Und wenn du der flag mehrere mögliche Werte gibst als 0 und 1, kannst du auch verschiedene "Arten" eines Pausestatus erzeugen - so kannst du dann relativ einfach zwischen "Der Spieler hat auf Pause gedrückt" und "Ich warte ein paar Steps, weil ich grade von einer tödlichen Kugel getroffen wurde" und "Ich warte, weil grade ein neues Level geladen wird" usw. unterscheiden. Definitiv die Lösung, die ich nehmen würde - wenn dir das nicht zu viel Planungs- oder Tipparbeit ist. ^^
  • Mein Code funktionierte beim Test!?

    Edit: Ach ne stimmt, muss nen < sein.

    Edit2: Habs verbessert.
    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

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