Den Game Maker benutzen
Oberflächen zeichnen
Diese Funktionen sind nur in der registrierten Version des Game
Makers verfügbar.
In manchen Situationen möchtest du eventuell nicht direkt auf den Bildschirm, sondern auf eine Leinwand, zeichnen, die später dazu benutzt werden kann Dinge auf den Bildschirm zu zeichnen. Diese Leinwände heissen Oberflächen (Surfaces). Wenn du z.B. den Spieler etwas zeichnen lassen willst, willst du nicht, dass es direkt auf den Bildschirm gezeichnet wird (weil es in nächsten Step bereits verschwunden wäre), sondern auf eine Oberfläche, die in jedem Step auf den Bildschirm gezeichnet wird. Oder du willst eine Textur verwenden, die sich mit der Zeit verändert.
Alles das ermöglichen Oberflächen. Sie sind zudem noch vergleichsweise einfach zu benutzen: Zuerst erstellst du eine Oberfläche, danach gibst du an, dass alles weitere Zeichnen auf der Oberfläche stattfinden soll. Von diesem Moment an arbeiten alle Zeichenfunktionen auf dieser Oberfläche. Sobald du fertig bist, setzt du das Zeichen-Ziel zurück und alles weitere wird wieder auf den Bildschirm gezeichnet. Du kannst eine Oberfläche auf viele verschiedene Weisen auf den Bildschirm zeichnen, oder sie als Textur benutzen. Es gibt einige Dinge auf die du achten musst, beachte dazu die Hinweise weiter unten.
Die folgenden Funktionen existieren um mit Oberflächen
(Surfaces) zu arbeiten:
surface_create(w, h) Erstellt eine Oberfläche mit der angegebenen Höhe und Breite. Gibt die Id der Oberfläche zurück, die in den weitern Funktionsaufrufen benutzt werden muss. Beachte, dass die Oberfläche nicht gelöscht (leer gemacht) werden wird, dafür bist du verantwortlich. (Setze sie als Ziel fest und rufe die entsprechende Säuberungsfunktion auf.)
surface_free(id) Löscht die Oberfläche aus dem Speicher.
surface_exists(id) Gibt zurück, ob die Oberfläche mit der angegebenen Id existiert.
surface_get_width(id) Gibt die Breite der Oberfläche zurück.
surface_get_height(id) Gibt die Höhe der Oberfläche zurück.
surface_get_texture(id) Gibt die Textur, die der Oberfläche entspricht zurück. Diese kann genutzt werden um texturierte Objekte mit dem Inhalt der Oberfläche zu zeichnen.
surface_set_target(id) Setzt die angegebene Oberfläche als Ziel aller Zeichenfunktionen fest, die dann darauf arbeiten. Die Projektion wird so eingestellt, dass die Oberfläche einfach bedeckt wird.
surface_reset_target() Setzt das Zeichen-Ziel auf den normalen Bildschirm zurück.
surface_getpixel(id, x, y) Gibt die Farbe des Pixels an der Position (x, y) in der Oberfläche zurück. Diese Funktion ist nicht sehr schnell, setzte sie also vorsichtig ein.
surface_save(id, fname) Speichert ein Bmp der Oberfläche an den angegebenen Dateinamen. Nützlich um Screenshots zu machen.
surface_save_part(id, fname, x, y, w, h) Speichert den angegebenen Teil der Oberfläche in ein Bmp mit dem angegebenen Dateinamen.
draw_surface(id, x, y) Zeichnet die Oberfläche an die Position (x, y). (Ohne Farb- und Alpha-Blending)
draw_surface_stretched(id, x, y, w, h) Zeichnet die Oberfläche gestreckt auf die angegebene Region.
draw_surface_tiled(id, x, y) Zeichnet die Oberfläche Wiederholt, so dass sie den ganze Raum ausfüllt.
draw_surface_part(id, left, top, width, height, x, y) Zeichnet den angegebenen Teil der Oberfläche mit ihrem Ursprung bei (x,y).
draw_surface_ext(id, x, y, xscale, yscale, rot, color, alpha) Zeichnet die Oberfläche gesteckt, gedreht und mit Farb- und Alpha-Blending. (Benutze c_white für keine Farbveränderung und alpha im Bereich von 0-1.)
draw_surface_stretched_ext(id, x, y, w, h, color, alpha) Zeichnet die Oberfläche auf die angegeben Region gestreckt. color gibt die Farb- und alpha die Alpha-Blending-Werte an.
draw_surface_tiled_ext(id, x, y, xscale, yscale, color, alpha) Zeichnet die Oberfläche weiderholt, so dass sie den ganzen Raum ausfüllt, aber mit Skalierung und Farb- und Alpha-Blending.
draw_surface_part_ext(id, left, top, width, height, x, y, xscale, yscale, color, alpha) Zeichnet den angegebenen Teil der Oberfläche mit ihrem Ursprung bei (x,y) aber mit Skalierung und Farb- und Alpha-Blending.
draw_surface_general(id, left, top, width, height, x, y, xscale, yscale, rot, c1, c2, c3, c4, alpha) Die allgemeinste Funktion. Sie zeichnet den angegebenen Teil der Oberfläche mit ihrem Ursprung bei (x,y) aber mit Saklierung, Rotation, einer Farbe für jeden Eckpunkt (In der Reihenfolge oben-links, oben-rechts, unten-rechts und unten-links) und einer Trasparenzeinstellung.
surface_copy(destination, x, y, source) Kopiert die Quell-Oberfläche (source) an der Position (x,y) in die Ziel-Oberfläche (destination). (Ohne jeglich Form des Blendings)
surface_copy_part(destination, x, y, source, xs, ys, ws, hs) Kopiert den angegebenen Teil der Quell-Oberfläche (source) mit ihrem Ursprung bei (x,y) in die Ziel-Oberfläche (destination). (Ohne jegliche Form des Blendings)
Beachte, dass es keine Funktion gibt, die einen Teil des Bildschirms auf die Oberfläche kopiert. (Das ist nicht möglich, weil zwischen dem Bildschirm und der Oberfläche verschiedene Formate benutzt werden könnten.) Falls das trozdem von Nöten sein sollte, setze einfach eine Oberfläche als Zeichen-Ziel und zeichne dann den Raum. Schließlich kannst du dann die Funktionen benutzen um einen bestimmten Ausschnitt zu bekommen.
Du kannst von Oberflächen auch Sprites und Hintergründe erzeugen, beachte dazu den Abschnitt, der vom Verändern von Ressourcen handelt.
Beachte folgendes, wenn du die obenstehenden Funktionen nutzt:
- Du solltest das Zeichen-Ziel nie ändern, sobald du bereits zeichest, d.h. nicht in einem Draw-Event. Dies hätte schwerwiegende Probleme mit der Projektionsmatrix und der Anzeige zur Folge.
- Oberflächen funtkionieren im 3D-Modus nicht richtig. Du kannst sie benutzen, während der 3D-Modus deaktiviert ist (indem du d3d_end() aufrufst, bevor du sie benutzt), aber sobald der 3D-Modus aktiviert wird, gehen die Oberflächen verloren.
- Wegen der Geschwindigkeit werden Oberflächen nur im Video-RAM gespeichert. Aus diesem Grund kann es passieren, dass sie verloren gehen, wenn z.B. die Auflösung geändert wird oder der Bildschirmschoner gestartet wird.
- Oberflächen werden nicht mit gespeichert, wenn das Spiel gespeichert wird.
Alternative Versionen
Auch verfügbar in:
Download helpfile