Den Game Maker benutzen
Fortgeschrittene Zeichnungs-Funktionen
Diese Funktionalität ist nur in der registrierten Version des Game Makers verfügbar.Weiter oben wurde eine Anzahl von einfachen Zeichnungs-Funktionen beschrieben. Hier findest du eine Anzahl von zusätzlichen Funktionen, die dir viel mehr Möglichkeiten bieten. Zuallererst gibt es Funktionen, um Formen mit Farbverläufen zu zeichnen. Dann gibt es Funktionen, um mehr gewöhnliche Polygone zu zeichnen, und schließlich gibt es die Möglichkeit, texturierte Polygone zu zeichnen.
Die folgenden, erweiterten Versionen der einfachen Zeichnungs-Funktionen Funktionen existieren. Jede von ihnen erhält extra Farbparameter, die benutzt werden, um die Farbe an den verschiedenen Eckpunkten zu bestimmen. Die standard Zeichnungs-Farbe wird in diesen Funktionen nicht verwendet.
draw_point_color(x, y, col1) Zeichnet einen Punkt bei (x|y) in der angegebenen Farbe.
draw_line_color(x1, y1, x2, y2, col1, col2) Zeichnet eine Linie von (x1|y1) nach (x2|y2), durch Interpolation der Farbe zwischen col1 und col2.
draw_rectangle_color(x1, y1, x2, y2, col1, col2, col3, col4, outline) Zeichnet ein Rechteck. Die vier Farben geben die Farben bei dem oben-linken, dem oben-rechten, dem unten-rechten, und dem unten-linken Eckpunkt an. outline gibt an, ob nur die Kontur gezeichnet werden muss (true) oder ob es ausgefüllt sein soll (false).
draw_roundrect_color(x1, y1, x2, y2, col1, col2, outline) Zeichnet ein abgerundetes Rechteck. col1 ist die Farbe in der Mitte und col2 die Farbe an der Grenze. outline gibt an, ob nur die Kontur gezeichnet werden muss (true) oder ob es ausgefüllt sein soll (false).
draw_triangle_color(x1, y1, x2, y2, x3, y3, col1, col2, col3, outline) Zeichnet ein Dreieck. Die drei Farben sind die Farben der drei Eckpunkte, welche über das Dreieck interpoliert werden. outline gibt an, ob nur die Kontur gezeichnet werden muss (true) oder ob es ausgefüllt sein soll (false).
draw_circle_color(x, y, r, col1, col2, outline) Zeichnet einen Kreis bei (x,y) mit dem Radius r. col1 ist die Farbe in der Mitte und col2 die Farbe an der Grenze. outline gibt an, ob nur die Kontur gezeichnet werden muss (true) oder ob es ausgefüllt sein soll (false).
draw_ellipse_color(x1, y1, x2, y2, col1, col2, outline) Zeichnet eine Ellipse. col1 ist die Farbe in der Mitte und col2 die Farbe bei der Grenze. outline gibt an, ob nur die Kontur gezeichnet werden muss (true) oder ob es ausgefüllt sein soll (false).
Du kannst auch größerer Primitives zeichnen. Dies funktioniert leicht anders. Du fängst an zu spezifzieren, welches Primitive du zeichnen möchtest. Als nächstes spezifizierst du die Eckpunkte für es, und schließlich beendest du das Primitive, bei welchem Moment es gezeichnet wird. Es gibt sechs Arten von Primitives:
pr_pointlist Die Eckpunkte sind ein Satz von Punkten.
pr_linelist Die Eckpunkte sind ein Satz von Linien-Segmenten. Jedes Paar von Eckpunkten bildet ein Linien-Segment. Also muss es einen geraden Satz von Eckpunkten geben.
pr_linestrip Die Eckpunkte bilden eine Polylinie, wobei der erste mit dem zweiten, der zweite mit dem dritten etc. verbunden ist. Der letzte ist nicht mit dem ersten verbunden. Du musst eine extra Kopie des ersten Eckpunktes hierfür spezifizieren.
pr_trianglelist Die Eckpunkte sind ein Satz von Dreiecken. Jede Dreiergruppe von Eckpunkten bildet ein Dreieck. Also muss die Anzahl von Eckpunkten ein Vielfaches von 3 sein.
pr_trianglestrip Die Eckpunkte bilden wieder Dreiecke, aber diesmal funktioniert es leicht anders. Die ersten drei bilden das erste Dreieck. Die letzten zwei von diesen Eckpunkten, zusammen mit dem nächsten Eckpunkt, bilden das zweite Dreieck, etc. Also jeder neue Eckpunkt spezifiziert ein neues Dreieck, welches mit dem letzten verbunden ist.
pr_trianglefan Einer Dreiecksliste (triangle list) ähnlich, aber diesmal ist der Erste Eckpunkt Teil von allen Dreiecken. Wiederum spezifiziert jeder neue Eckpunkt ein neues Dreieck, welches mit dem vorherigen Eckpunkt und dem ersten verbunden ist.
Die folgenden Funktionen existieren für das Zeichnen von Primitives
draw_primitive_begin(kind) Beginne ein Primitive des angegebenen Typs.
draw_vertex(x, y) Füge den Eckpunkt (x|y) dem Primitive hinzu, benutzt die zuvor gesetzte Farbe und den alpha Wert.
draw_vertex_color(x, y, col, alpha) Füge den Eckpunkt (x|y) dem Primitive hinzu, mit seiner eigenen Farbe und seinem eigenem Alpha- Wert. Dies erlaubt dir Primitives mit sich sauber ändernden Farben und Alpha-Werten zu erstellen.
draw_primitive_end() Beendet die Beschreibung des Primitives. Diese Funktion zeichnet es eigentlich.
Letzendlich ist es möglich, Primitives unter Verwendung von Sprites oder Hintergründen als Texturen zu zeichnen. Wenn eine Textur benutzt wird wird das Bild auf dem Primitive platziert, wobei es neugeformt wird um auf das Primitive zu passen. Texturen werden benutzt, um Details zu Primitives hinzuzufügen, wie z.B. eine Backsteinwand. Um Texturen zu benutzen, musst du zuerst die Id der Textur, die du benutzen möchtest, erhalten. Hierfür existieren die folgenden Funktionen:
sprite_get_texture(spr, subimg) Gibt die Id der Textur dem Einzelbild subimg des angegebenen Sprites entsprechend wieder.
background_get_texture(back) Gibt die Id der Textur dem angegebenen Hintergrund entsprechend wieder.
Eine ausgewählte Textur muss sich noch nicht im in Videospeicher befinden. Das System wird sie dorthin legen, sobald du sie einmal brauchst, aber manchmal möchtest du dies selbst entscheiden. Für dies existieren die folgenden zwei Funktionen:
texture_preload(texid) Legt die Textur sofort in den Videospeicher.
texture_set_priority(texid, prio) Wenn es zu wenig Videospeicher gibt, wird etwas vorübergehend entfernt werden, um Platz für andere zu schaffen, die gebraucht werden. Die mit der niedrigeren Priorität werden zuerst entfernt. Normalerweise haben alle die Priorität 0, aber du kannst die Priorität hier ändern. (Benutze positive Werte!)
Um Texturen zu Primitives hinzuzufügen, musst du spezifizieren, welche Teile der Texturen wo auf dem Primitive platziert werden müssen. Positionen in den Texturen werden mit Werten zwischen 0 und 1 angegeben, allerdings gibt es ein Problem hier. Größen von Texturen müssen Potenzen von 2 sein (also z.B. 32x32 oder 64x64). Wenn du Sprites oder Backgrounds als Texturen benutzen möchtest, gehst du besser sicher, dass sie eine solche Größe haben. Um herauszufinden welcher Teil der Textur tatsächlich benutzt wird kannst du die folgenden zwei Funktionen benutzen. Sie geben einen Wert zwischen 0 und 1 wieder, der die benutzte Breite/Höhe der Textur angibt. Das Spezifizieren dieses Wertes als Textur-Koordinate wird die rechte oder untere Seite der Textur angeben.
texture_get_width(texid) Gibt die Breite der Textur mit der angegeben Id wieder. Die Breite liegt in dem Bereich von 0-1.
texture_get_height(texid) Gibt die Höhe der Textur mit der angegeben Id wieder. Die Breite liegt in dem Bereich von 0-1.
Um texturierte Primitives zu zeichnen, kannst du die folgenden Funktionen benutzen:
draw_primitive_begin_texture(kind, texid) Starte ein Primitive der angegebenen Art und der gegebenen Textur.
draw_vertex_texture(x, y, xtex, ytex) Füge den Eckpunkt (x|y) dem Primitive mit der Position (xtex|ytex) in der Textur hinzu, überblendet mit dem zuvor festgelegten Farben- und dem Alpha-Wert. xtex und ytex sollten normalerweise zwischen 0 und 1 liegen aber auch größere Werte können benutzt werden, die zu einer Wiederholung der Textur führen (siehe unten).
draw_vertex_texture_color(x, y, xtex, ytex, col, alpha) Füge den Eckpunkt (x|y) dem Primitive mit der Position (xtex|ytex) in der Textur hinzu, überblendet mit seinem eigenen Farben- und Alpha-Wert.
draw_primitive_end() Beendet die Beschreibung des Primitives. Diese Funktion zeichnet es eigentlich.
Es gibt drei Funktionen, die beeinflussen, wie Texturen gezeichnet werden:
texture_set_interpolation(linear) Gibt an, ob lineare Interpolation (true) benutzt oder ob der nächste Pixel genommen werden soll (false). Lineare Interpolation gibt sauberere Texturen, kann aber auch ein bisschen verwischen und kostet manchmal zusätzliche Zeit. Diese Einstellung beeinflusst auch das Zeichnen von Sprites und dem Hintergrund. Standard ist false. (Dies kann auch in den globalen Spiel Einstellungen geändert werden.)
texture_set_blending(blend) Gibt an, ob Überblenden mit Farb- und Alpha-Werten benutzt werden soll. Dies auszuschalten mag auf alter Hardware schneller sein. Diese Einstellung beeinflusst auch das Zeichnen von Sprites und dem Hintergrund. Standard ist true.
texture_set_repeat(repeat) Gibt an, ob die Textur wiederholt werden soll. Dies funktioniert wie folgt. Wie oben angegeben liegen Textur-Koordinaten im Bereich von 0-1. Wenn du einen Wert größer als 1 spezifizierst, wird der Rest standardmäßig nicht gezeichnet. Durch das Setzen von repeat auf true wird die Textur wiederholt. Beachte, dass Sprites und Hintergründe immer ohne Wiederholung gezeichnet werden. Also wenn du einmal einen Sprite oder Hintergrund zeichnest, wird dieser Wert auf false zurückgesetzt. Standard ist false.
Es gibt zwei weitere Funktionen, die nicht nur nützlich zum Zeichnen von Texturen sind. Normalerweise werden Primitives mit dem Hintergrund überblendet durch Benutzung des Alpha-Wertes. Du kannst tatsächlich angeben, wie dies passieren muss. Neben dem normalen Modus ist es möglich, dass die neue Farbe von der existierenden Farbe addiert oder subtraiert werden muss. Dies kann benutzt werden um z.B. Spot- Lichter oder Schatten zu kreieren. Weiterhin ist es möglich, sozusagen das Maximum der neuen und der existierenden Farbe zu nehmen. Dies kann bestimmte Saturations-Effekte verhindern, die durch Addieren erhalten kannst. Beachte, dass beide, Subtraieren und Maximum, den Alpha-Wert nicht vollständig in Betracht ziehen. (DirectX erlaubt dies nicht.) Also gehst du besser sicher, dass das äußere Areal schwarz ist. Es gibt zwei Funktionen. Die erste gibt dir nur die vier oben beschriebenen Optionen. Die zweite Funktion gibt dir eine Menge mehr Möglichkeiten. Du solltest ein bisschen mit den Einstellungen expirimentieren. Wenn sie effektiv genutzt werden, können sie benutzt werden, um z.B. interessante Explosionen or Halo-Effekte zu kreieren.
draw_set_blend_mode(mode) Gibt an, welcher Überblendungsmodus zu benutzen ist. Die folgenden Werte sind möglich: bm_normal, bm_add, bm_subtract, and bm_max. Vergiss nicht, den Modus nach Benutzung auf normal wieder zurückzusetzen, weil sonst auch andere Sprites und sogar Hintergründe mit dem neuen Überbledungsmodus gezeichnet werden.
draw_set_blend_mode_ext(src, dest) Gibt an, welcher Überblendungsmodus für beide, die Quell- und die Ziel-Farbe zu benutzen ist. Die neue Farbe ist ein Faktor times mal die Quelle und ein anderer Faktor mal das Ziel. Diese Faktoren werden mit dieser Funktion festgelegt. Um dies zu verstehen, haben die Quelle und das Ziel beide als Rot, Grün, Blau und Alpha Komponente(???). Die Quelle ist also (Rs, Gs, Bs, As) und das Ziel ist (Rd, Gd, Bd, Ad). Alle werden in Betracht gezogen, zwischen 0 und 1 zu liegen. Die Überblendungs- faktoren, die du für Quelle und Ziel auswählen kannst, sind:Zum Beispiel legt der normale Überblendungsmodus die Quell-Blende auf bm_src_alpha und die Ziel-Blende auf bm_inv_src_alpha fest. Vergiss nicht, den Modus nach Benutzung auf normal wieder zurückzusetzen, weil sonst auch andere Sprites und sogar Hintergründe mit dem neuen Überbledungsmodus gezeichnet werden.
- bm_zero: Überblendungsfaktor ist (0, 0, 0, 0).
- bm_one: Überblendungsfaktor its (1, 1, 1, 1).
- bm_src_color: Überblendungsfaktor ist (Rs, Gs, Bs, As).
- bm_inv_src_color: Überblendungsfaktor ist (1�Rs, 1�Gs, 1�Bs, 1�As).
- bm_src_alpha: Überblendungsfaktor is (As, As, As, As).
- bm_inv_src_alpha: Überblendungsfaktor ist (1�As, 1�As, 1�As, 1�As).
- bm_dest_alpha: Überblendungsfaktor ist (Ad, Ad, Ad, Ad).
- bm_inv_dest_alpha: Überblendungsfaktor is (1�Ad, 1�Ad, 1�Ad, 1�Ad).
- bm_dest_color: Überblendungsfaktor ist (Rd, Gd, Bd, Ad).
- bm_inv_dest_color: Überblendungsfaktor ist (1�Rd, 1�Gd, 1�Bd, 1�Ad).
- bm_src_alpha_sat: Überblendungsfaktor ist (f, f, f, 1); f = min(As, 1�Ad).
Das Zeichnen von texturierten Primitives ist ein bisschen Arbeit, kann aber zu großartigen Ergebnisen führen. Du kannst es sogar benutzen um vorgetäuschte 3D-Spiele zu machen.
Alternative Versionen
Auch verfügbar in:
Download helpfile