Ein mit ini-Dateien arbeitendes Menü (GML)

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

    • Ein mit ini-Dateien arbeitendes Menü (GML)

      Voraussetzungen:
      -GML-Kenntnisse
      -GM7 Lite


      Hallo Liebe Community!
      Hier kommt mein 2. Tutorial, aufgrund eines Missstandes bei releaseten Gamemaker-Spielen, der mich schon lange wurmt. Ich hasse es ein Spiel zu sehen dass entweder kein Menü oder keine Soundregulierung hat. Es wertet das Spiel einfach total ab. Außerdem ist die Musik oft unhörbar und dann will ich einfach meine eigene hören und nicht gleich die Boxen ganz abdrehen müssen.
      Genau darum, und um noch mehr, geht es hier in diesem Tutorial.
      Das Tutorial zeigt wie man
      - Ein einfach Menü gestalten kann
      - Schieberegler programmieren kann
      - einen Sprachenwechsel mit variablen leicht programmieren kann
      - aus Ini-Dateien Informationen herauslesen und verändern kann

      Warum will ich ein Menü dass mit ini-dateien arbeitet?
      Das schöne an Ini-dateien ist, dass Informationen in einer Ini-datei gespeichert werden und so frühere Änderungen vom Benutzer beim nächsten Start einfach vorhanden bleiben. Der Benutzer stellt zum Beispiel ein, dass er keinen Sound haben will weil er das Spiel in der Schule spielt. Normalerweise müsste er jetzt jedes mal den sound umstellen, aber mit einem auf Ini-dateien basierenden Menü, seine früheren Änderungen werden einfach beim nächsten Start wieder aufgerufen.

      So genug gelabbert, ran an den Speck!
      Beginnen wir damit wie eine Ini-datei aufgebaut ist:

      Es ist eine ganz normale Datei die mit dem Notepad geöffnet werden kann. Ihre Strukturierung ist wie folgt: Section ist der Bereich, Key ist der name und value ist der Wert. Man kann das ganze auch mit einem Kasten vergleichen. Die Ini-datei ist der Kasten, die Sections sind die Schubladen, die Keys sind die Akten in den Schubladen und die Values sind das, was in den Akten steht. es ist in einer Ini-datei also alles schön gegliedert.


      Werte aus einer Ini-datei herauslesen

      Um nun die Ini-datei im Gamemaker aufzurufen musst du zuerst mal eine erstellen. Also einfach mim Notepad eine passende Gliederung schreiben und als ini-datei abspeichern. Dann erstellst du ein Objekt, das beim start des Spiel exsistiert und legst einen code imgame start () event an.
      mit dem Befehl

      GML-Quellcode

      1. ini_open("deineIni-datei.ini");
      öffnest du die datei. Ab dann kannst du Werte daraus auslesen oder sie verändern. Das geht mit diesen befehlen:

      GML-Quellcode

      1. global.variable1=ini_read_string("optionen","sprache","englisch");
      2. global.variable2=ini_read_real("optionen","volume",50);

      Die Variable am Anfang ist notwendig damit die Werte, die du ausliest nicht komplett sinnlos ausgelesen werden. So werden sie in der Variable gespeichert. Am Ende, wenn du fertig bist mit dem auslesen ist es wichtig, doe Ini-datei auch wieder zu schließen mit dem Befehl

      GML-Quellcode

      1. ini_close();



      Ini-dateien verändern

      Hierbei ist wieder wichtig die inidatei zu öffnen und zu schließen. Also der eingebettete Befehl würde so ausschauen

      GML-Quellcode

      1. ini_open("ini-datei.ini");
      2. ini_write_real("optionen","volume",global.volume);
      3. ini_close();



      So jetzt aber genug von der Theorie, gehen wir in die Praxis über.
      Ich werde anhand meines Soundreglers erklären wie man am besten mit inidateien umgeht.
      Mein Schiebe-regler besteht aus 3 Events: dem Create-event(), dem left-mouse-event() und dem draw-event()

      Das objekt ist in meinem Fall ein langer Sprite auf dem ich dann ein Schiebteil zeichnen lasse. Die Variable die die Postiotion des Schiebteils angibt ist schiebx.
      Um am Anfang dem Schiebteil die richtige Postion zu geben benötige ich das Create-event in dem steht:

      GML-Quellcode

      1. schiebx=global.volume+x-50;

      global.volume ist mein sound der von 0 bis 100 geht. Deshalb ist mein Sprite auch 101 pixel lang (0 ist ja auch ein wert, also gibt es 101 Werte). Das +x-50 ist so zu erklären, dass mein Sprite im center steht (deshalb nehme ich 50 pixel weg um auf 0 zu sein) und das x ist das um den Balken dynamisch zu gestalten.
      im left mouse event steht dann:

      GML-Quellcode

      1. if(mouse_x>x-51 && mouse_x<x+51)
      2. {
      3. schiebx=mouse_x;
      4. global.volume=schiebx-x+50;
      5. ini_open("data.ini");
      6. ini_write_real("optionen","volume",global.volume);
      7. ini_close();
      8. sound_global_volume(power(global.volume/100,1/5));
      9. }

      Das ist also eigentlich auch keine große Hexerei. Es sagt soviel wie: Wenn die maus bei unserer skala zwischen 0 und 100 ist, soll zuerst mal unsere Schiebebalken-variable den x wert der maus annehmen, dann wird die Lautstärkenvariable angepasst, an die ini datei weitergegeben und dann der allgemeine sound angepasst. Vielleicht ist aufgefallen dass hier nicht steht sound_global_volume(global.sound/100) sondern zuerst noch die fünfte wurzel daraus gezogen wird. Warum? Weil man ab einer lautstärke von 0.4 so gut wie nichts mehr hört. Bekanntlich nähern sich zahlen zwischen 0 und 1 der größe 1 an. Dass ich die Wurzel ziehe hat also nur den Zweck den schiebebalken ein bisschen zu modifizieren.

      Dann kommt natürlich noch das draw-event:

      GML-Quellcode

      1. draw_sprite(spr_menu_musik_unten,-1,x,y);
      2. draw_sprite(spr_menu_musik_verschieber,-1,schiebx,y);
      3. draw_set_font(font0);
      4. draw_set_color(c_ltgray);
      5. draw_text(x+100,y-12,global.volume);

      Hier wird der Schieberegler, der Balken und der aktuelle Wert gezeichnet.

      Mehr Features findet ihr in der angehängten datei :)

      mfg johannski
      menü.rar
    • Also erstmal: echt gutes tut. Alles klar und verständlich, und eines der wenigen die sich mit inis beschäftigen und auch deren titel tragen.
      Das einzige was mich stört ist das du oben sagst: vorraussetzungen: gml kenntnisse
      ich würed mal grundkenntnisse nehmen weil kenntisse ein weites spektrum umfasst. Ich finde es schade dass du nicht wie angekündigt die sprache mit erwähnt hast. Es ist zwar im beispiel enthalten, ich hätte mich trozdem gefreut es hier zu finden!
      Mehr hab ich nicht zu bemägneln.
      Ich hoffe du schreibst noch ein paar tuts über etwas anspruchsvollorere sachen, da kann ich dann auch was lernen^^
      mfg gamer_08
    • Benutzer online 1

      1 Besucher