Das Spielgeschehen stoppen [reg]

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

    • Das Spielgeschehen stoppen [reg]

      Dieser Tipp benötigt die registrierte Version des Game Makers und funktioniert ab Version 6.1.

      Hiermit könnt ihr euer Spiel "anhalten", ohne die Engine des Spieles anzuhalten.
      Dadurch sind z.B. animierte Pause Screens, In-Game Menüs oder Textboxen realisierbar, bei denen das Spiel an sich nicht weiterlaufen soll.

      Erstellt ein Objekt, ich nenne es mal obj_Pause. Dieses Objekt wird das einzige sein, das während des Stillstands noch etwas ausführen kann.

      Im Create Event komm folgendes rein:

      GML-Quellcode

      1. var_pause=0;


      var_pause ist die Variable, die bestimmt ob gerade Pause ist. 0 heißt nein, 1 heißt ja.

      Im Step Event wird dann folgender Code verwendet:

      GML-Quellcode

      1. if (keyboard_check_pressed(vk_pause)) then {
      2. if (var_pause=1){ // es ist gerade Pause, alle Objekte wieder aktivieren
      3. var_pause=0;
      4. surface_free(mysurface);
      5. instance_activate_all();
      6. }
      7. else if (var_pause=0){// es ist keine Pause, das aktuelle Bild mit dem nächsten Step einfrieren
      8. mysurface=surface_create(view_wport[0],view_hport[0]); //erstellt den Zwischenspeicher
      9. surface_set_target(mysurface);
      10. screen_redraw(); //zeichnet in den Zwischenspeicher
      11. surface_reset_target() ;
      12. instance_deactivate_all(true); //deaktiviert alle Objekte
      13. var_pause=1;}
      14. }
      Alles anzeigen


      Durch diesen Code wird das Spiel beim Drücken der Pause-Taste dazu veranlasst, beim nächsten Step das Bild nicht auf den Bildschirm sondern in einen internen Zwischenspeicher zu zeichnen. Danach werden alle Objekte ausser das Pause Objekt selber deaktiviert.
      Wird dann wieder die Pause-Taste betätigt wird der interne Zwischenspeicher wieder gelöscht und die Objekte werden wieder aktiviert, das Spielgeschehen also wieder in Gang gesetzt.

      Um nun den Zwischenspeicher auch anzeigen zu lassen muss folgendes im Draw Event untergebracht werden:

      GML-Quellcode

      1. if (var_pause=1){
      2. draw_surface(mysurface, view_xview[0], view_yview[0]); //zeichnet den Zwischenspeicher auf den Bildschirm
      3. }


      Das wars nun auch schon, ziemlich einfaches Skript und doch sehr wirkungsvoll, und einer der guten Pause Modi den man mit dem Game Maker 6.1 realisieren kann.


      Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • Bleib bitte auf dem Teppich, ich bin nicht größer als jeder andere, und ne Menge Arbeit wars nicht, der Code war ne Sache von 4 Minuten.
      Man muss nur eben drauf kommen das solch ein Code gefragt wird.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • echt n guter tipp! i habs bisher immer so gelöst, dass objekte nur dann ihren aktionen nachgehen, wenn eine gewisse variable "pause"=0 is. wenn man dann zum beispiel die [PAUSE]-taste drückt, schaltet die variable auf 1 um. muss man halt nur immer wieder bei jedem objekt neu einbauen; funzt aba auch ;)
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • ich habe das Problem immer wie folgt gelöst:

      jedes Objekt hat in den Draw und Step-events nur noch die if - funktion:

      if(global.pause) exit;

      der nachfolgende Code wurde einfach nicht mehr ausgeführt, der davor schon, so konnte man z. B. sicherstellen dass der Sprite gezeichnet wurde und man konnte es noch animiert lassen, das gab dem Spiel ein besonderes etwas.. Alles ist zwar pausiert aber die Figuren werden noch weiter animiert....
    • nein, es geht nicht für 6.0, da Windapples code surfaces benutzt, die erst ab GM 6.1 existieren.

      //edit: mist, WA war schneller^^
      “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

      Ich schreibe mit Neo.

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

    • Das ganze geht aber noch VIIIIIIIIIEL eifacher!!
      (ich erklärs mal für n00b s auf deutsch)
      Wenn P gedrückt wird
      >Den Spielstand speichern
      >und in den Raum Pause gehen.

      Im Raum Pause kommt alles rein, was ihr in der Pause anzeigen lassen wollt.
      Dann macht noch ein Objekt mit den Aktionen:

      Wenn Irgendeine Taste <any key> gedrückt wird
      >Den Spielstand laden.


      Ist doch ganz einfach, oder?8)
      Kaldor - Das erste echte MMORTS
    • Ansich nicht schlecht, wenn nicht das Problem wäre das man dies als speicherstand missbrauchen könnte und das ist bei spielen die zum Beispiel auf speicherpunkte aufbaun nicht gut, einmal pause gemacht und schon gespeichert, so würde man soetwas umgehen können.
      Face in the wind, we're riding the storm
      We'll stay our course whatever will come
      ~~ Stay (Running) Wild ~~
    • Natürlich, die Methode mit dem Spielstand setzt beim beenden des Pausemenüs alles so wie es vorher war, was währenddessen gemacht wurde existiert nicht mehr.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum