Spiel pausiren klappt nicht

  • GM 7

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

  • Spiel pausiren klappt nicht

    Hi, hab das mit dem Pausemenu mal nach Copys Tutorial gemacht, nur ein klein wenig verändert.
    Und zwar hab ich ein obj_pause, das hat folgende Events und Aktionen:

    Create-Event:

    GML-Quellcode

    1. pause = 2;


    Step-Event:

    GML-Quellcode

    1. if pause == 1
    2. {
    3. instance_create(mouse_x,mouse_y,obj_mouse);
    4. set_automatic_draw(false)
    5. instance_deactivate_all(true);
    6. instance_activate_object(obj_mouse);
    7. }


    Draw-Event (draw_box und draw_get_button sind eigene Funktionen):

    GML-Quellcode

    1. if pause == 1
    2. {
    3. draw_set_color(c_black);
    4. draw_set_alpha(0.75);
    5. draw_rectangle(0,0,room_width,room_height,false);
    6. draw_box();
    7. draw_get_button(426,260,726,300,c_white,"Weiterspielen",c_black);
    8. }


    Press-Escape-Event:

    GML-Quellcode

    1. pause = 1;



    Das Gute ist, dass die Instanzen deaktiviert, das schlechte ist, dass es die Box und die Buttons nicht drawt, aber diese eigenen Funktionen funktionieren und es erstellt aber auch nicht mal das Mausobjekt, zumindest sehe ich es nicht.

    Ich hoffe ihr entdeckt den Fehler oder könnt mir andersweitig helfen.
    Gruß Gamer
  • Ich würde das so machen:

    GML-Quellcode

    1. if pause == 1
    2. {
    3. instance_create(mouse_x,mouse_y,obj_mouse);
    4. instance_create(0,0,obj_draw_pause)
    5. set_automatic_draw(false)
    6. instance_deactivate_all(true);
    7. instance_activate_object(obj_mouse)+
    8. instance_activate_object(obj_draw_pause);
    9. }

    Obj_draw_pause:
    Draw event:

    GML-Quellcode

    1. if pause == 1
    2. {
    3. draw_set_color(c_black);
    4. draw_set_alpha(0.75);
    5. draw_rectangle(0,0,room_width,room_height,false);
    6. draw_box();
    7. draw_get_button(426,260,726,300,c_white,"Weiterspielen",c_black);
    8. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

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

  • Schau dir noch einmal mein "Tutorial" an, du hast noch nicht einmal alle Events richtig kopiert.
    Der Sinn dabei ist dieser: Es gibt ein Pause-Objekt, das du erst erstellst, wenn du dein Spiel pausieren willst und dann zerstörst, wenn es weiter gehen soll. Im schlimmsten Fall musst du dir dafür noch ein Kontroller-Objekt basteln, das beim Press Escape Event das Pause-Objekt erstellt.
    Alle Instanzen und das automatische Zeichnen werden im Create Event deaktiviert.
    Im Step Event aktivierst du kurz alle Instanzen und zeichnest den Bildschirm neu - das hast du total vergessen :huh:

    Dein Ansatz ist komplett falsch, also kopiere vielleicht erst einmal alle Codes 1:1, bevor du dich an das Aussehen des Pause-Menüs selbst machst :P
  • ich hab doch gesagt, dass ichs ein bisschen anders machen möchte.
    DAchte das geht so auch, dann mach ichs halt so wie im Tut.

    edit:

    so hab das jetzt geändert und zwar genau nach deinem Tut gemacht: Copy's Tutorial

    Aber die Instanzen sind immernoch aktiv, an was liegt das, hab sie 1 zu 1 kopiert, hab auch nochmal nachgeschaut.
    Gruß Gamer

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

  • Kann das sein, dass die Instanzen nur gezeichnet werden, aber nicht aktiv sind?
    Für den Fall, dass man das nicht will, hab ich ja auch was vorbereitet:
    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.
  • Hm?
    Das mit dem transparenten Pausebildschirm möchte ich schon.
    Hier mal ne Erklärung wie es bei mir aussieht.
    Ich hab ein controller objekt, dass das obj_pause auf knopfdruck erstellt.

    Dann hab ich bei dem genau deine codes rein plus im create event erstellts und aktivierts noch die Maus (die sich überhaupt nicht nach der Maus bewegt, obwohl sie das zum Beispiel im Menu tut)

    Und im Draw_event sind noch zusätzlich die 2 Skripte, die die buttons und die box zeichnet.

    Und welche Instanzen meinst du, dass sie nur gezeichnet werden?


    Edit: hab mal die Datei upgeloadet: file-upload.net/download-1725629/Minigame.zip.html
    Gruß Gamer

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

  • Die Instanzen werden deaktiviert, die Draw Events werden aber trotzdem alle ausgeführt, deshalb bewegt sich die Linie noch, wenn das Spiel pausiert ist. Eine mögliche (sehr einfache) Lösung wäre, abzufragen, ob obj_pause existiert und die Linie nur gezeichnet wird, wenn das nicht der Fall ist.

    Nun zur Maus, fällt dir am Step Event (im Vergleich zum Create Event) etwas auf?

    GML-Quellcode

    1. instance_activate_all();
    2. screen_redraw();
    3. instance_deactivate_all(true);
    Du aktiviert das Maus-Objekt nicht wieder :P

    Jetzt ist mir aber auch noch aufgefallen, dass set_automatic_draw(true) im Draw Event ausgeführt scheinbar nicht funktioniert, wie es sollte. Also erstell im Create Event eine Variable: destroy = false;. In das Step Event kommt folgender Code noch vor den anderen:

    GML-Quellcode

    1. if (destroy) {instance_destroy(); exit;}
    Und so funktioniert der "Weiterspielen"-Button dann:

    GML-Quellcode

    1. if (draw_get_button(426,260,726,300,c_white,"Weiterspielen",c_black)) {
    2. destroy = true;
    3. }

    Ich hoffe es klappt wie gewollt :)
  • ok danke, ob es nicht existiert heißt ja

    GML-Quellcode

    1. if !object_exists(obj_pause)


    Funktioniert aber nicht.


    edit: was bedeutet eig. der letzte code

    Falls draw_get_button then destroy=true, bedeutet des, falls man ihn drückt, wird obj_pause zerstört??
    und das muss auch ins step oder, aber wo davor oder hinter die anderen codes?

    edit2: klappt bisher alles bis auf die gezeichnete Linie, dankeschön.


    edit3: mit !instance_exists(obj_pause) gehts, juhu, nur was blöd ist, dass wenn ich auf Weiterspielen drück, dann gleich bei Score eins dazu kommt und der Sound abgespielt wird, wie kann man das ändern
    was auch nicht funktionieren will ist bei meinem neuen button "Hauptmenu" hab ich genau das gleiche gemacht wie bei dem anderen aber dann hab ich halt room_goto(rm_menu) aber das einzige was passiert, die maus bewegt sich nicht mehr aber es geht nicht ins Menu, warum?

    Gruß Gamer

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von The Gamer ()

  • Indem du destroy auf false setzt, sorgst du dafür, dass erst im nächsten Step Event die Instanz zerstört wird (durch die Abfrage).
    Zum Problem: Du musst das automatische Zeichnen wieder aktivieren, wenn du in einen anderen Raum gehen willst. Vielleicht solltest du die Button-Abfrage lieber gleich ins Step Event packen. Also entferne den Code wieder, der mit destroy zu tun hat, mach die Abfrage im Draw Event weg, sodass nur noch

    GML-Quellcode

    1. draw_get_button(426,260,726,300,c_white,"Weiterspielen",c_black);
    dort steht und für den Code dafür auch ins Step Event ein:

    GML-Quellcode

    1. if (draw_get_button(426,260,726,300,0,"",0)) {
    2. instance_destroy();
    3. io_clear(); // < Sollte das score Problem lösen.
    4. }
    5. if (draw_get_button(/* Werte für Hauptmenü-Button */,0,"",0)) {
    6. instance_destroy();
    7. room_goto(rom_menu);
    8. }

    Wenn du den Skript dafür nicht verwenden willst kannst du es gleich wieder wie vorher machen:

    GML-Quellcode

    1. if (mouse_x>=426&&mouse_y>=260&&mouse_x<726&&mouse_y<300) { // ...
  • Ok danke, es löst aber nicht das Score Problem mit dem io_clear da der Ball ja erst losrollt, wenn man die Maus loslässt, das muss aber so bleiben, da es eine Anzeige gibt, die Poweranzeige die immer höher wird, wenn man auf der Maus bleibt.
    Aber der Rest klappt jetzt, Danke.
    Gruß Gamer
  • Benutzer online 1

    1 Besucher