Lektion 1: Projekt starten und erste Schritte beim Titelbildschirm!
Heute werden wir ein Projekt öffnen und den GMS2 soweit einstellen, dass wir ein schönes Titelbild starten können. Diese Lektion umfasst:
- Einen Raum mit Kameras und Viewport einstellen
- Ein Objekt mit Draw-Event erstellen
- Ein kleines Skript schreiben
Wir öffnen über "File -> New Project" ein neues Projekt und machen es zu einem Game Maker Language (GML)-basierten Projekt. Mit dem GMS2 können wir auch über Drag N Drop Spiele erstellen, wir nutzen jedoch die Skriptsprache, da wir so schneller und effizienter sind! Je nach gewähltem Modus wird die IDE den entsprechenden Bedürfnissen angepasst.
Rechts sehen wir das Ressourcen-Fenster. Das Ressourcen-Fenster ist eine Bibliothek der unterschiedlichen Assets, Skripte, Maps, Objekte etc. die wir in den GMS2 importiert oder dort drin erstellt haben. Im Sprite-Unterpunkt seht ihr zwei Sprites, die ich dort direkt mit der Maus reingezogen habe: spr_titlescreen und spr_cursor. Beim GMS können Sprites direkt aus einem Ordner ins IDE gezogen werden und müssen nicht extra importiert werden. Ich verwende spr_ vor dem eigentlichen Namen, damit ich direkt rauslesen kann, was genau sich dahinter verbirgt, in dem Fall also Sprites. spr_titlescreen ist eine 320x240 große Grafik, die unser Hintergrund für den Titelbildschirm ist. spr_cursor wird ein herzförmiger Cursor (15x13) sein, mit dem wir die Titelmenü-Unterpunkte anvisieren werden. rm_titlescreen ist der default-Raum, den ich nur über Rechtsklick umbenannt habe. Räume sind wie Maps beim RPG-Maker und können mit Objekten gefüllt werden. f_titlescreen in die Schriftart, die ich im Titelmenü gerne hätte.
Hier nochmal ein paar Worte zu der Schriftart: über Rechtsklick auf "Fonts"und "Create" öffnet sich das unten abgebildete Fenster. Ich verwende Bitstream Vera Sans Mono als eine frei verfügbare Schriftart, die auf den gängigen Font-Webseiten gedownloaded werden kann. Grundsätzlich können alle(!) auf dem Rechner installierte Schriftarten verwendet werden.
Das sind alle Ressourcen, die wir für die heutige Lektion brauchen. Als nächstes Klicken wir auf rm_titlescreen und öffnen den Raumeditor. Dieser sieht wie folgt aus:
Layer funktionieren wie bei Photoshop und ermöglichen unterschiedliche Hintergründe, Objekte und ähnliches in ihnen unterzubringen. Hätten wir zum Beispiel zwei Background-Layer, könnten wir so zwei unterschiedliche Hintergrundgrafiken im Raum anzeigen lassen und so leicht Parallax-Effekte oder ähnliches erzeugen.
Bei den Eigenschaften (Properties) des Raums können wir unterschiedliche Einstellungen vornehmen. Auf die gehen wir jetzt im Detail ein:
Unter Room Settings stellen wir die Größe des Raums ein. Da unser Sprite 320x240 groß ist, wird auch unser Raum diese Dimensionen haben.
Unter Viewports und Cameras erstellen wir eine Camera, die unseren Bildabschnitt darstellt. Stellt euch vor, ihr habt einen Raum mit den Dimensionen 6000x6000. Natürlich könnt ihr diesen nicht vollständig auf einem Bildschirm abbilden sondern habt einen Bildabschnitt mit der gewünschten Auflösung, der über diesen Raum wandert. Zusätzlich stellen wir den Viewport an. Der Viewport entspricht der Übertragung der Spielauflösung durch die Camera auf das eigentliche Spielfenster. Wir wählen einen Faktor von 2 und damit 640x480, damit wir beim Spielen überhaupt was sehen können! Pixelgrafiken sollten stets um ganze Vielfache der ursprüngliche Grafik vergrößert werden, damit keine Artefakte entstehen.
Abschließend klicken wir auf den Background-Layer und fügen den Titlescreen-Sprite als Hintergrundgrafik ein. Damit ist der erste Abschnitt fertig! Bevor wir an den Wahlmöglichkeiten arbeiten, sollten wir uns erstmal vergewissern, ob alles so funktioniert wie wir es uns vorgestellt haben.
Wir starten das Spiel über den Playbutton oben links. Das GMS2 geht davor aus, dass der erste Raum in der Ressourcenreihenfolge auch der erste Raum im Spiel ist. Lasst uns auf Play drücken und schauen was passiert!
Folgendes Fenster sollte bei euch erscheinen. Falls es nicht der Fall ist, ist bis hierher etwas schief gelaufen. Geht nochmal durch das Tutorial und schreibt gegebenfalls in den Thread, damit ich euch helfen kann!
Nun wollen wir als letzten Teil dieser Lektion die Schrift einfügen. Dazu brauchen wir ein Objekt, welches das Zeichnen kontrolliert. Dazu Rechtsklick auf "Objects" im Ressourcenfenster und dann "Create", wodurch sich das Objektfenster öffnet. Wir benennen es in obj_titlemenu und fügen über Add Event ein Draw-Event hinzu! Ein Draw-Event ist ein Codefragment, welches jeden Frame gelesen wird und Text oder Sprites zeichnet.
Im Draw-Event habe ich folgenden Code reingeschrieben:
Über Doppelslash könnt ihr Kommentare einfügen im Code, sehr praktisch um diesen organisiert zu halten. Unter defaultsettings habe ich die Schriftfarbe und die die Schriftart festgelegt, welche ab jetzt genutzt werden soll. Unter get camera id speichere ich in der Variable cam die ID der Kamera, die wir im Roomeditor angelegt haben. Das ist wichtig, da wir so die x-und y-Werte unserer Schrift nicht in Bezug auf den Raum sondern in Bezug auf unseren Bildschirmabschnitt wählen können.
Unter draw text schreiben wir unseren Text für die Menüauswahlen. Die Funktion lautet draw_text(x,y, "string"). Die obere linke Ecke hat die (x,y)-Koordinaten (0,0), die untere rechte Ecke ist (320x240). Damit der Text unabhängig von der Größe des Raums ist und nur vom Bildschirmabschnitt abhängt, nehmen wir als x-Wert camera_get_view_x(cam) und addieren die gewünschte Verschiebung von x = 0 dazu.
Unter draw cursor zeichnen wir den Cursorsprite. Die Funktion lautet draw_sprite(sprite, subimage, x, y). Subimage ist wichtig, wenn der Sprite aus mehreren Animationsframes besteht, auf die wir zugreifen wollen. Da es ein einfacher Sprite bei uns ist, ist subimage = 0.
Nun öffnen wir wieder unseren Raum und ziehen über das Ressourcenfenster unser neues Objekt obj_titlemenu dort rein. Jetzt testen wir das Ganze und schauen wie es aussieht:
Schon nicht schlecht, aber irgendwie ist die Schriftart langweilig und nicht so gut leserlich, da es keinen Schatten gibt. Lasst uns noch schnell ein neues Skript schreiben, um dieses Problem zu lösen! Mit Skripten können eigene Funktionen wie draw_text(); geschrieben werden und das macht unseren Code übersichtlich! Rechtsklickt im Ressourcenfenster auf "Scripts" und erschafft ein neues über "Create"!
Was genau passiert im Skript? Wir wollen eine neue Funktion mit dem Namen draw_text_shadow(); In der Klammer sind die Argumente, die wir der Funktion zur Verfügung stellen, damit es was schönes damit macht. Dies ist zum einem x- und y-Positionen, die in argument0 und argument1 gespeichert werden. Warum ich die Infos in xx und yy speichere? Weil x und y schon fest eingebaute Variablen vom Objekt sind, und diese wollen wir nicht! Anschließend setzen wir die Farbe auf shadow_color (argument4) und zeichnen unseren Text, dieser ist aber um 1 Pixel nach rechts und unten verschoben, damit er wie ein Schatten aussieht! Anschließend setzen wir die Farbe wieder auf die Schriftfarbe (argument3) und zeichnen auf der "richtigen Position" unseren Text drüber. Anschließend setzen wir die Schriftfarbe wieder auf default, falls wir z.B. nen gelben Text wollten.
Nun passen wir unser Draw-Event im obj_titlemenu mit diesem neuen Skript an und definieren über die make_color_rgb()-Funktion die Farbe unseres Schatten. Der Code des Draw-Events sollte nun so aussehen:
Fertig! Lasst uns das Endergebnis anschauen. Schöner Schatten, oder? In der nächsten Lektion werden wir den Cursor auf Tasten reagieren lassen (und sogar Gamepad!) und so das Startmenü funktional gestalten. Hinterlasst doch einen Kommentar/euer Feedback und bis nächste Woche!
![]()