textbasierendes Menü

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

    • textbasierendes Menü

      Das original ist von Chronic von der Engischen Community.
      Er bittet auch um einen Creditseintrag wenn das hier benutzt wird..
      Ich habe es mal übersetzt.

      Dieses Tutorial wird dir zeigen, wie man ein textbasierendes Menü macht, später werden auch Submenüs erklärt.

      Beginnen wir:
      Öffne einen GameMaker deiner Wahl. Ich habe es mit dem Game Maker 7 gemacht, es sollte aber auch mit anderen Versionen funktionieren.

      Erstelle einen Raum, ein Objekt und ein Script. Benenne das Objekt zu obj_menu, den Scipt zu scr_InitMenu.
      Nun erstelle das obj_menu an der oberen linken Ecke(0,0) in dem erstellten Raum.
      Öffne obj_menu und erstelle im Create-Event folgeden Code:

      GML-Quellcode

      1. {
      2. scr_InitMenu();
      3. }

      Dies führt den Script scr_InitMenu aus, welcher im Moment nichts macht, da er leer ist. Also öffnen wir ihn um ihn zu bearbeiten.
      Beginnen wir mit einem normalen Menü mit: Spiel starten, Optionen, Anleitung und Spiel beenden.
      Man kann natürlich noch mehr machen, diese Sachen werden nur zum Testen benutzt jetzt.
      Füge im Script scr_InitMenu folgendes hinzu:

      GML-Quellcode

      1. {
      2. menuSelected = 1;
      3. menuText[0] = 4;
      4. menuText[1] = "Start Game"
      5. menuText[2] = "Options"
      6. menuText[3] = "Instructions"
      7. menuText[4] = "Quit Game"
      8. }

      Die 4 zeigt an, wie viele Optionen es im Menü gibt.
      Mit der Variable menuSelected könen wir überprüfen bei welcher Option(welchem Button) wir gerade sind wenn wir Enter drücken.
      Nun müsen wir noch machen, das die Sachen auch gezeichnet werden, also gehen wir wieder zum obj_menu , um es zu bearbeiten.
      Füge das Draw-Event hinzu und erstelle folgenden Code:

      GML-Quellcode

      1. {
      2. for (i = 1; i <= menuText[0]; i+=1) {
      3. draw_text(x,y+(i*16)-16,menuText[i]);
      4. }
      5. }

      Teste nun das Spiel, es sollte jetzt etwa so aussehen:
      BILD
      Wenn du mehr Optionen gemacht hast, sie aber nicht gezeigt werden hast du höchstwahrscheinlich den Index nicht auf die gleiche Anzahl wie deine Optionen erhöht.

      Nun machen wir, das das gewählte in rot angezeigt wird. Dies machen wir mit einer kleinen änderung im Loop kurz bevor der Text gezeichnet wird.

      GML-Quellcode

      1. {
      2. for (i = 1; i <= menuText[0]; i+=1) {
      3. if (menuSelected = i) { draw_set_color(c_red); } else { draw_set_color(c_black); }
      4. draw_text(x,y+(i*16)-16,menuText[i]);
      5. }
      6. }

      Dies kommt ins Draw-Event. Die Position des Menüs ist dort, wo du es im room plaziert hast, in diesem Fall 0,0 .
      Du kannst die Position ändern wie du willst, auch die Farben, welche im Menü benutzt werden.
      Auch Schriftgröße und Schrifttyp kannst du ändern. Dabei musst du nur aufpassen, dass sich die Menüpunkte nicht überschneiden. Wenn dies jedoch der Fall ist kannst du einfach die 16 ändern, passend der neuen Schriftgröße.

      Jetzt machen wir, das man mit den Pfeiltasten Up und Down navigieren kann. Ihr könnt die Tasten natürlich ändern.
      Füge im Press Event der Up-Taste diesen Code hinzu:

      GML-Quellcode

      1. {
      2. menuSelected -=1;
      3. if (menuSelected < 1) { menuSelected = menuText[0]; }
      4. }

      Und im Press-Event der Down-Taste diesen:

      GML-Quellcode

      1. {
      2. menuSelected +=1;
      3. if (menuSelected > menuText[0]) { menuSelected = 1; }
      4. }

      Teste es nun. Nun solltest du navigieren können, das gewählte sollte immer Rot markiert sein.
      BILD
      Nun müssen wir nur noch machen, das die Optionen etwas machen, denn sonst wäre es ja sinnlos.
      Also brauchen wir ein anderes key-press event, in diesem Fall Enter.Füge ein Key-Press Enter Event in dem obj_menu hinzu und erstelle dort folgenden Script:

      GML-Quellcode

      1. {
      2. switch(menuSelected) {
      3. case 1: // Start Game
      4. show_message("Start Game");
      5. break;
      6. case 2: // Options
      7. show_message("Options");
      8. break;
      9. case 3: // Instructions
      10. show_message("Instructions");
      11. break;
      12. case 4: // Exit Game
      13. show_message("Exit Game");
      14. break;
      15. }
      16. }
      Alles anzeigen

      Es ist sinnvoll, Kommentare zu machen wie hier, das man sonst evt. nicht genau weiß was bestimmte Menüpunkte bringen.
      Man sollte auch noch mehr machen als nur eine Nachricht zeigen, bei Exit Game z.B. game_end()

      Das ist alles um ein textbarierendes Menü zu machen. Ich hoffe ihr habe es jetzt verstanden.
      Aktuelles Projekt: Aufbau - Strategiespiel.
      Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

      Wichtig ist nicht, besser zu sein als alle anderen.
      Wichtig ist, besser zu sein als du gestern warst.





      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von gamer ()

    • RoFra schrieb:

      GML-Quellcode

      1. {
      2. for (i = 1; i <= menuText[0]; i+=1) {
      3. if (menuSelected = i) { draw_set_color(c_red); } else { draw_set_color(c_black); }
      4. draw_text(x,y+(i*/*Hier deinen Zwischenraum einfügen*/)-16,menuText[i]);
      5. }
      6. }
      Was muss ich da eingeben eine zahl oder wie?
    • RoFra schrieb:

      Normaler weise sagt man ja "Probieren geht über Studieren"...

      Ja, du musst da eine Zahl einfügen.
      Ja hab auch ewtwas proviert^^, aber ich glaub ich mach was falsch, also ich hab den Code in das Script gesetzt, ist das richtig? Und was amch ich falsch, hier der Code:

      GML-Quellcode

      1. {
      2. menuSelected = 1;
      3. menuText[0] = 4;
      4. menuText[1] = "Start Game"
      5. menuText[2] = "Load Game"
      6. menuText[3] = "Anleitung"
      7. menuText[4] = "Quit Game"
      8. for (i = 1; i <= menuText[0]; i+=1) {
      9. if (menuSelected = i) { draw_set_color(c_red); } else { draw_set_color(c_black); }
      10. draw_text(x,y+(i*1000)-16,menuText[i]);
      11. }
      12. }
      Alles anzeigen
    • RoFra schrieb:

      Das, was da hin muss, ist der Abstand in Pixeln. Bei 1000 Pixeln ist es klar, dass alles außerhalb des Bildschirms gezeichnet wird. Im Tutorial wird Original 16 verwendet. Für einen größeren Abstand probier mal eine Zahl zwischen 20 und 30.
      uh sry, hatte auch solche zahlen probiert, es bewegt sich garnihcts.

      edit: sry hab gerade gesehen das der code ganz woanders hin muss. Klappt, danke für hilfe, sry echt^^
    • Hallo,

      also super Menü. Hab das schon mal in mein Spiel integriert. Funktioniert auch soweit.

      Aber wie kann ich jetzt die Schriftart ändern?? Habe bei Fonts schon eine Schriftart hinzugefügt namens "menu", aber wie baue ich das jetzt in das Objekt ein (in die Source), damit auch die Schriftart und die Schriftgröße ändert.

      Super Arbeit. Würde mich über Hilfe freuen.

      Danke schonmal

      paul
    • paulste schrieb:

      @ Irrenhaus3: Vielleicht füg ich das auch einfach an die falsche Stelle sein. Vielleicht probier ich das später nochmal.

      Trotzdem danke

      paul


      Tu den Code doch ganz hinten im Script einfügen z.B. so:

      GML-Quellcode

      1. {
      2. for (i = 1; i <= menuText[0]; i+=1) {if (menuSelected = i) { draw_set_color(c_red); } else { draw_set_color(c_black); }
      3. draw_text(x,y+(i*16)-16,menuText[i]);draw_set_font(menu);}
      4. }