Spiel pausieren ohne viel Aufwand

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

    • Spiel pausieren ohne viel Aufwand

      Es gibt viele verschiedene Möglichkeiten, sein Spiel zu pausieren. Die meisten jedoch sind sehr aufwändig und brauchen oft viel Zeit und/oder Können. Auch wenn man beides besitzt, heißt das noch lange nicht, dass die Pause-Funktion eures Spiels sehr effektiv und, was mir sehr am Herzen liegt, sauber gecodet ist. In diesem Tutorial werde ich euch kurz und knackig beschreiben, wie man es effektiv und sauber macht.

      Voraussetzungen:
      - Einigermaßen gutes GML-Verständnis.
      - Die Gabe, unbekannte Funktionen in der Hilfe nachzuschlagen.
      - Game Maker 6 oder höher.

      Soweit ich durchblicke, braucht man dafür nicht einmal die registrierte / Pro-Version.
      Warnung: Ich zeige euch hier nicht, wie ihr die Instanz erstellt und/oder löscht.
      Genauso wenig werde ich beschreiben, wie ihr Optionen, Grafiken oder ähnliches in euer Pause-Menü einbaut, das ist euer Ding. :P
      Hinweis: Wenn ihr euer Draw Event noch für andere Dinge außer den Draw-Aktionen benutzt,
      müsst ihr diese Teile eventuell in ein anderes Event verlagern (es bietet sich das End Step Event an).

      Nun zu den Codes:

      Create:
      Ja genau, das ist unsere Idee dahinter: Automatisches Zeichnen und Instanzen deaktivieren.

      GML-Quellcode

      1. set_automatic_draw(false);
      2. instance_deactivate_all(true);
      3. // Wer zusätzlich noch Partikel benutzt, kann das automatische
      4. // Updaten der Systeme mit folgendem Code abgeschaltet werden:
      5. // part_system_automatic_update(part_system,false);

      Destroy:
      Das genaue Gegenstück zum Create Event:

      GML-Quellcode

      1. set_automatic_draw(true);
      2. instance_activate_all();
      3. // Und für die mit Partikelsystemen noch zusätzlich:
      4. // part_system_automatic_update(part_system,true);

      Step:
      Jetzt kommen wir zur eigentlichen Hauptattraktion.
      Hier werden kurz alle Instanzen aktiviert und der Fensterinhalt neu gezeichnet,
      also alle Draw-Events ausgeführt, natürlich in der gleichen Reihenfolge wie normalerweise.

      GML-Quellcode

      1. instance_activate_all();
      2. screen_redraw();
      3. instance_deactivate_all(true);

      Draw:
      Und weil es sonst ziemlich doof aussehen würde, zeichnen wir über das Ganze noch ein halbtransparentes, schwarzes Rechteck drüber:
      (Damit das wie gewünscht funktioniert muss der Depth-Wert des Objektes unter allen anderen liegen.)

      GML-Quellcode

      1. draw_set_color(c_black);
      2. draw_set_alpha(0.5);
      3. draw_rectangle(0,0,room_width,room_height,false);
      4. // Und wenn ihr Views benutzt gibt es noch diese Alternative:
      5. // draw_rectangle(view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,false);

      Und wenn ihr den Quatsch mit dem durchsichtigen Pause-Bildschirm nicht haben wollt, entfernt das Step Event und das set_automatic_draw() aus dem Create- und Destroy-Event.

      Das war es auch schon, ich hoffe es hilft einigen :D
      Gruß, euer kopierjunge

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von copyboy ()

    • So erstmal hat geklappt :thumbsup: :thumbsup: ^^
      Das hat bei mir noch einige Probleme,

      1. Alle meinen anderen Anzeigen im Spiel werden auch durchsichtig, und bleiben dann auch so.
      wie 1. Alle schriften im Spiel werden bisschen durchsichtig und bekommen die gleiche Farbe die man im draw event für den pause Bildschirm eingesetzt hat.

      Das liegt an

      GML-Quellcode

      1. draw_set_color(c_black);
      2. draw_set_alpha(0.5);


      Das war eigentlich das schlimmste.

      2. Der Schwarze Pause Bildschirm blinkt die ganze zeit.

      Das waren bisher meine einzigen Probleme.
      Trotzdem echt super arbeit :thumbsup:
      Mein Aktuelles und auch einziges Projekt ist "The Color of Life"
      Es wird ein Rollenspiel! Eine lange Story die auch gut ist. Das umzusetzen dauert eben bis 2011!
      Freue mich über jede Hilfe die ich bekommen kann. ^^
      Bald GM8 :thumbsup: wird der hammer xD
    • Ok, das mit den durchsichtigen und andersfarbigen Texten und Anzeigen ist verständlich.
      Entweder musst du es konsequent durchziehen, dass du vor jeder Draw-Aktion Alpha und Color einstellst (das mach zumindest ich immer so) oder du setzt sie in diesem einen Draw Event wieder zum gewünschten Wert zurück:

      GML-Quellcode

      1. draw_set_color(c_black);
      2. draw_set_alpha(0.5);
      3. draw_rectangle(0,0,room_width,room_height,false);
      4. draw_set_color(c_white); // hier deine Text-Farbe eintragen
      5. draw_set_alpha(1);

      Warum der Bildschirm bei dir blinkt ist mir allerdings ein Rätsel.
      Könnte ich mal die Datei sehen? :D
    • xXTechmanXx schrieb:

      Ich amchs mir immer viel einfacher einfach ne Pause room machen dan das spiel speichern wenn man esc drückt und wenn man auf spiel fortsetzen geht wieder den Save laden :D
      Nö, denn dann hat man das Problem, dass alles was man im Pause-Menü gemacht hat /z.B. Optionen) nicht gespeichert wird.
    • Hat jetzt alles geklappt! außer...

      Also hat alles geklappt!
      Danke dafür ^^ echt sieht sogar sehr gut aus.

      Also das einzige Problem ist, dass ich 2 unterschiedliche Tasten nehmen muss.
      Habe beim obj_charakter im
      press event enter: create obj_pause
      und beim obj_pause im
      press event leertaste (space): destroy obj_pause

      Ich wollte eigentlich beides bei press event enter einfügen aber das funktzioniert nicht.
      Mein Aktuelles und auch einziges Projekt ist "The Color of Life"
      Es wird ein Rollenspiel! Eine lange Story die auch gut ist. Das umzusetzen dauert eben bis 2011!
      Freue mich über jede Hilfe die ich bekommen kann. ^^
      Bald GM8 :thumbsup: wird der hammer xD
    • Das fällt zwar nicht in den Zuständigkeitsbereich des Tutorials aber ich nenn dir mal zwei Möglichkeiten, das zu lösen:
      - io_clear() in's Create Event - darauf hab ich allerdings in meinem Spiel verzichtet.
      - Eine Variable, die du im Create Event auf false und im Alarm Event, das nach einem Step aufgerufen wird, auf true setzt.
      Dann fügst du das als Abfrage hinzu:

      GML-Quellcode

      1. if (variable) {instance_destroy();}
      Natürlich gibt es noch mehr und was du benutzt ist dann dir selbst überlassen. ;)
    • aso wieso bin ich nicht selber drauf gekommen :P ;)
      sry :D
      Mein Aktuelles und auch einziges Projekt ist "The Color of Life"
      Es wird ein Rollenspiel! Eine lange Story die auch gut ist. Das umzusetzen dauert eben bis 2011!
      Freue mich über jede Hilfe die ich bekommen kann. ^^
      Bald GM8 :thumbsup: wird der hammer xD
    • Benutzer online 1

      1 Besucher