Ich möchte nun auch einmal ein kleines Tutorial posten.
Ich denke, viele von euch haben auch schon mal das Problem gehabt, dass man in Strategiespielen oder ähnlichem
im Bau-Menü die Objekte gerne in einer Scrollbox angeordnet haben möchte. Wie das geht, möchte ich in diesem
Tutorial zeigen.
Vorweg eine kurze Klarstellung (nicht das sich jemand was falsches vorstellt): Die Bedingungen dafür sind, das die
Objekte die gleiche Höhe und Breite besitzen. Außerdem werden die Objekte nicht so dargestellt, wie in einer
Windows-Scrollbox, also es wird entweder das ganze Objekt gezeigt oder es wird nicht gezeigt.
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------1.Material-----------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Wir brauchen:
-drei Sprites gleicher Höhe und Breite, die möglichst etwas unterschiedlich aussehen
-3 Objekte mit diesen Sprites, die ansonsten nichts weiter erledigen (obj_scroll1, obj_scroll2, obj_scroll3)(origin=0,0)
-ein Sprite mit einem nach oben Pfeil (Origin=Center)
-ein Sprite mit einem nach unten Pfeil(Origin=Center)
-ein Objekt "obj_up" mit dem nach oben Pfeil Sprite (Code->Teil 3.1)
-ein Objekt "obj_down" mit dem nach unten Pfeil Sprite(Code->Teil 3.2)
-ein Objekt "obj_scrollbox" ohne Sprite (Code->Teil 2)
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------2. Die eigentliche Scrollbox: obj_scrollbox----------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Die eigentliche Scrollbox erledigt die Hauptarbeit und ist auch am schwierigsten zu programmieren. Um eine Scrollbox
zu benutzen, muss dieses Objekt auf die Karte gesetzt werden.
Ich denke, viele von euch haben auch schon mal das Problem gehabt, dass man in Strategiespielen oder ähnlichem
im Bau-Menü die Objekte gerne in einer Scrollbox angeordnet haben möchte. Wie das geht, möchte ich in diesem
Tutorial zeigen.
Vorweg eine kurze Klarstellung (nicht das sich jemand was falsches vorstellt): Die Bedingungen dafür sind, das die
Objekte die gleiche Höhe und Breite besitzen. Außerdem werden die Objekte nicht so dargestellt, wie in einer
Windows-Scrollbox, also es wird entweder das ganze Objekt gezeigt oder es wird nicht gezeigt.
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------1.Material-----------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Wir brauchen:
-drei Sprites gleicher Höhe und Breite, die möglichst etwas unterschiedlich aussehen
-3 Objekte mit diesen Sprites, die ansonsten nichts weiter erledigen (obj_scroll1, obj_scroll2, obj_scroll3)(origin=0,0)
-ein Sprite mit einem nach oben Pfeil (Origin=Center)
-ein Sprite mit einem nach unten Pfeil(Origin=Center)
-ein Objekt "obj_up" mit dem nach oben Pfeil Sprite (Code->Teil 3.1)
-ein Objekt "obj_down" mit dem nach unten Pfeil Sprite(Code->Teil 3.2)
-ein Objekt "obj_scrollbox" ohne Sprite (Code->Teil 2)
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------2. Die eigentliche Scrollbox: obj_scrollbox----------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Die eigentliche Scrollbox erledigt die Hauptarbeit und ist auch am schwierigsten zu programmieren. Um eine Scrollbox
zu benutzen, muss dieses Objekt auf die Karte gesetzt werden.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.1. Create-Event<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Im Create-Event werden die Startwerte für die Box gesetzt. Hier kann man bei Bedarf die Werte abändern, um eine
individuelle Box zu gestalten.
Zuerst legen wir die Eigenschaften der Objekte fest, die wir nachher der Box zuordnen:
Als nächstes geben wir an, wieviele Objekte wir zuordnen möchten
Dann wieviele Objekte gleichzeitig sichtbar seien sollen:
Dann ordnen wir einem Array die darzustellenden Objekte zu:
Dann legen wir fest, welches Objekt das oberste sichtbare sein soll
Als nächstes müssen wir die Scrollpfeile erzeugen, ihre
ID's abspeichern und ihnen mitteilen, zu welcher Box sie gehören:
Die Werte ergeben sich aus:
Up-Pfeil:
x:x+bb+0.5*Sprite-Breite des Pfeils+Breite des Randes in der Box
y:y+0.5*Sprite-Höhe des Pfeils
Down-Pfeil:
x:x+bb+0.5*Sprite-Breite des Pfeils+Breite des Randes in der Box
y:y+hh*Zahl der sichtbaren Objekte+Dicke des Randes in der Box-0.5*Sprite-Höhe
Damit die Box weiß, wann sie sich wieder neu "zeichnen" muss, legen wir eine Nachrichtenvariabele fest:
Nun müssen wir das Erste mal die Boxobjekte erzeugen und an ihren Platz setzen:
Alles anzeigen
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.2. Step-Event<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Im Step-Event wird-Bei mir mit Drag&Drop Prüfung- geprüft, ob "redrw=true" ist, wenn ja müssen die Boxobjekte
neu erzeugt werden und die Variabele "redrw" wird wieder auf false gesetzt.
Bevor jedoch die Elemente neu erzeugt werden, werden mithilfe des folgenden Codes alle Elemente, die in "realobj[]"
gespeichert sind, gelöscht:
Anschließend folgt wieder der bereits im Create-Event beschriebene Code zur Erzeugung der Instanzen.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.3. Draw-Event<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Im Draw-Event wird die Box um die Objekte herum gezeichnet. Dazu setzt man zunächst die Farbe auf einen beliebigen
Wert und zeichnet dann ein Rechteck mit folgenden Werten:
x1:x
y1:y
x2:x+bb+innerer Boxrand+Sprite-Breite des Pfeils
y2:y+hh*visobj+2*Innerer Boxrand
Wir nehmen einen Boxrand von 10 Pixeln.
Weiter zeichnen wir nun mit einer anderen Farbe den inneren Teil der Box:
x1:x+innerer Boxrand
y1:y+innerer Boxrand
x2:x+bb+innerer Boxrand
y2:y+hh*visobj+innerer Boxrand
Damit haben wir die Box gezeichnet.
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------3. Die Scrollpfeile--------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.1. Der Up-Pfeil<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
a) Create-Event:
Setze die Variabele "clickable" auf true, sie dient dazu, das die Scoll-Box nicht beim ersten Click nach oben rast.
b)Left Mouse Button-Event:
c)Alarm 0-Event:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.2. Der Down-Pfeil<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Beim nach unten Pfeil entspricht der Code ziemlich genau dem des nach oben Pfeils.
Nur der Code für die Scrollbedingung im Click-Event ändert sich:
_________________________________________________________________________________________________________________
Um das Ergebnis zu betrachten, musst du eine Instanz von "obj_scrollbox" auf die Karte setzen und das Spiel starten.
Ich hoffe, das euch mein Tutorial etwas nutzt und das ich alles gut erklärt habe.
Viel Spaß mit eurer Scrollbox.
>>.gmk File
Im Create-Event werden die Startwerte für die Box gesetzt. Hier kann man bei Bedarf die Werte abändern, um eine
individuelle Box zu gestalten.
Zuerst legen wir die Eigenschaften der Objekte fest, die wir nachher der Box zuordnen:
Als nächstes geben wir an, wieviele Objekte wir zuordnen möchten
Dann wieviele Objekte gleichzeitig sichtbar seien sollen:
Dann ordnen wir einem Array die darzustellenden Objekte zu:
Dann legen wir fest, welches Objekt das oberste sichtbare sein soll
Als nächstes müssen wir die Scrollpfeile erzeugen, ihre
ID's abspeichern und ihnen mitteilen, zu welcher Box sie gehören:
GML-Quellcode
Die Werte ergeben sich aus:
Up-Pfeil:
x:x+bb+0.5*Sprite-Breite des Pfeils+Breite des Randes in der Box
y:y+0.5*Sprite-Höhe des Pfeils
Down-Pfeil:
x:x+bb+0.5*Sprite-Breite des Pfeils+Breite des Randes in der Box
y:y+hh*Zahl der sichtbaren Objekte+Dicke des Randes in der Box-0.5*Sprite-Höhe
Damit die Box weiß, wann sie sich wieder neu "zeichnen" muss, legen wir eine Nachrichtenvariabele fest:
Nun müssen wir das Erste mal die Boxobjekte erzeugen und an ihren Platz setzen:
GML-Quellcode
- //konstruktionscode für die sichtbaren elemente
- if (cnt<=visobj) //es sind sowieso alle objekte sichtbar
- {
- for (i=0;i<cnt;i+=1)//for-Schleife durchlaufen, bis alle cnt Objekte gemacht wurden
- {//objekte an den passenden stellen erzeugen
- //während in "obj[]" die Objekttypen gespeichert werden, werden in "realobj[]" die Ids der real erzeugten Objekte gespeichert
- realobj[i]=instance_create(x+10,y+10+i*hh,obj[i]);
- }
- }
- else //manche objekte sind unsichtbar
- {
- for (i=0;(i<visobj)&&(obobj-1+i<cnt);i+=1)
- //es dürfen nicht mehr als die sichtbaren objekte erzeugt werden && das letzte Objekt muss gerade noch sichtbar sein
- {//objekte an den passenden stellen erzeugen
- realobj[i]=instance_create(x+10,y+10+i*hh,obj[i+obobj-1]);
- }
- }
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.2. Step-Event<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Im Step-Event wird-Bei mir mit Drag&Drop Prüfung- geprüft, ob "redrw=true" ist, wenn ja müssen die Boxobjekte
neu erzeugt werden und die Variabele "redrw" wird wieder auf false gesetzt.
Bevor jedoch die Elemente neu erzeugt werden, werden mithilfe des folgenden Codes alle Elemente, die in "realobj[]"
gespeichert sind, gelöscht:
Anschließend folgt wieder der bereits im Create-Event beschriebene Code zur Erzeugung der Instanzen.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.3. Draw-Event<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Im Draw-Event wird die Box um die Objekte herum gezeichnet. Dazu setzt man zunächst die Farbe auf einen beliebigen
Wert und zeichnet dann ein Rechteck mit folgenden Werten:
x1:x
y1:y
x2:x+bb+innerer Boxrand+Sprite-Breite des Pfeils
y2:y+hh*visobj+2*Innerer Boxrand
Wir nehmen einen Boxrand von 10 Pixeln.
Weiter zeichnen wir nun mit einer anderen Farbe den inneren Teil der Box:
x1:x+innerer Boxrand
y1:y+innerer Boxrand
x2:x+bb+innerer Boxrand
y2:y+hh*visobj+innerer Boxrand
Damit haben wir die Box gezeichnet.
------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------3. Die Scrollpfeile--------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.1. Der Up-Pfeil<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
a) Create-Event:
Setze die Variabele "clickable" auf true, sie dient dazu, das die Scoll-Box nicht beim ersten Click nach oben rast.
b)Left Mouse Button-Event:
GML-Quellcode
c)Alarm 0-Event:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.2. Der Down-Pfeil<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Beim nach unten Pfeil entspricht der Code ziemlich genau dem des nach oben Pfeils.
Nur der Code für die Scrollbedingung im Click-Event ändert sich:
GML-Quellcode
_________________________________________________________________________________________________________________
Um das Ergebnis zu betrachten, musst du eine Instanz von "obj_scrollbox" auf die Karte setzen und das Spiel starten.
Ich hoffe, das euch mein Tutorial etwas nutzt und das ich alles gut erklärt habe.
Viel Spaß mit eurer Scrollbox.
>>.gmk File

Beware of wild pointers______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____