Den Game Maker benutzen
Umherbewegen
Offensichtlich ist es ein wichtiger Aspekt bei Spielen, die Objektinstanzen auch zu bewegen. Jede Instanz besitzt zwei eingebaute Variablen x und y, welche die Position der Instanz markieren. (Um präzise zu sein: Sie geben den Bezugs-/Ursprungspunkt des "sprites" an.) Position (0,0) ist die linke obere Ecke des Raumes.Du kannst die Position der Instanz ändern, indem du seine x und y Variablen veränderst. Wenn dein Objekt komplizierte Bewegungen vollführen soll, ist das hier der richtige Weg. Typischerweise wird dieser Programmcode ins "step event" (Schrittereignis) des Objektes gesetzt.
Wenn das Objekt mit konstanter Geschwindigkeit und gleichbleibender Richtung bewegt werden soll, gibt es einen einfacheren Weg: Jedes Objekt besitzt eine horizontale Geschwindigkeitskomponente (hspeed) und eine vertikale Geschwindigkeitskomponente (vspeed). Beide werden in "pixels per step" (Bildpunkte pro Programmschritt) angegeben. Eine positive horizontale Geschwindigkeitskomponente bedeutet eine Bewegung nach rechts, eine negative nach links. Positive vertikale Geschwindigkeit bewegt nach unten, negative nach oben. Somit musst du nur einmal diese Variablen setzen (beispielsweise im "creating event"), um der Objektinstanz eine konstante Bewegung zu geben.
Es gibt noch eine andere Art,
Bewegung zu spezifizieren - Richtungsangabe (0° bis 359°) und
Geschwindigkeit (sollte nicht negativ sein). Du kannst diese Variablen
setzen und auslesen, um eine beliebige Bewegung zu spezifizieren.
(innerhalb des Game Makers werden diese Werte in "hspeed" und "vspeed"
umgewandelt.) Ferner gibt es noch die Reibung (friction) und die
Anziehungskraft (gravity) samt Richtung (gravity direction).
Abschliessend sei noch die Funktion: motion_add(dir,speed)
erwähnt, welche eine Bewegung zur vorhandenen addiert.
Um vollständig zu sein, hat jede Instanz folgende Variablen und
Funktionen, welche sich mit Position und Bewegung befassen:
x x-position der Instanz.
y y-position der Instanz.
xprevious vorherige x-position.
yprevious vorherige y-position.
xstart Anfangs-x-position im Raum.
ystart Anfangs-y-position im Raum.
hspeed Horizontale Komponente der Geschwindigkeit (speed).
vspeed Vertikale Komponente der Geschwindigkeit (speed).
direction Momentane Richtung (direction) {0°-360°, gegen den Uhrzeigersinn, 0 = nach rechts}.
speed Momentane Geschwindigkeit (in "pixels per step" [pps]).
friction Momentane Reibung (friction) (in "pixels per step").
gravity Momentaner Wert der Anziehungskraft (gravity) (in "pixels per step").
gravity_direction Richtung der Anziehungskraft (270 ist nach unten).
motion_set(dir, speed)Setzt die Bewegung mit angegebener Richtung(dir) und Geschwindigkeit(speed).
motion_add(dir, speed)Addiert die Bewegung zur vorhandenen (Vektoraddition).
Es gibt ein Menge an Funktionen, welche dir bei Bewegungsdefinitionen helfen:
place_free(x, y) Gibt an, ob die Instanz an angegebener Position(x,y) eine Kollision auslöst. Sie wird verwendet als Prüfroutine bevor man sich auf die neue Stelle bewegt.
place_empty(x, y) Gibt an, ob die Instanz an angegebener Position(x,y) auf nichts trifft. (Diese Funktion beachtet auch "non-solid" Instanzen.)
place_meeting(x, y, obj) Gibt an, ob die Instanz an angegebener Position(x,y) das Objekt obj trifft. obj kann ein Objekt sein - in so einem Fall gibt die Funktion den Wert "true" zurück, wenn es auf eine Instanz des Objekts trifft. Es kann aber auch eine "instance id" sein, das besondere Wort "all" (bedeutet irgendeine Instanz irgendeines Objektes), oder das besondere Wort "other".
place_snapped(hsnap, vsnap) Gibt an, ob die Instanz am Raster ausgerichtet ist(hsnap,vsnap).
move_random(hsnap, vsnap) Bewegt die Instanz zu einer freien, zufälligen und am Raster ausgerichteten Position.
move_snap(hsnap, vsnap) Richtet die Instanz am Raster aus.
move_wrap(hor, vert, margin) Wenn die Instanz außerhalb des Raumes ist, wird sie Auf die andere Seite des Raumes gesetzt, von wo aus sie sich wieder in den Raum bewegen kann. hor gibt an die Instanz zu versetzen, wenn sie sich horizontal aus dem Raum bewegt hat.vert macht das selbe vertikal. margin gibt an wie weit die Instanz aus dem Raum heraus sein muss, um versetzt zu werden.
move_towards_point(x, y, sp) Bewegt die Instanz mit der Geschwindigkeit (sp) zum Punkt(x,y).
move_bounce_solid(adv) Abprallen von "solid" Instanzen. adv gibt an, ob genauer berechnet wird (schräge Wände).
move_bounce_all(adv) Abprallen von allen Instanzen - nicht nur "solide".
move_contact_solid(dir, maxdist) Bewegt die Instanz solange in die angegebene Richtung, bis ein Kontakt mit einer anderen "solid" Instanz erreicht wird. Wenn an der aktuellen Position keine Kollision vorliegt, wird die Instanz kurz vor der Kollision platziert. Wenn schon eine Kollision vorliegt, wird die Instanz nicht bewegt. Du kannst die maximale Bewegungsweite(maxdist) angeben (negative Werte bedeuten beliebig lange).
move_contact_all(dir, maxdist) Wie oben, nur diesmal stoppt die Instanz bei jedem Kontakt mit einem anderen Objekt - nicht nur "solid" Objekte.
move_outside_solid(dir, maxdist) Bewegt die Instanz solange in die angegebene Richtung, bis sie sich nicht mehr innerhalb eines "solid" Objekts befindet. Wenn an der angegebenen Stelle keine Kollision auftritt, wird die Instanz auch nicht bewegt. Auch hier kannst Du die maximale Bewegungsweite angeben (maxdist negativ = beliebig weit).
move_outside_all(dir, maxdist) Wie oben, nur diesmal alle Objekte nicht nur "solid objects".
distance_to_point(x, y) Gibt die Distanz der Umrissbox (bounding box) der Instanz zum Punkt (x,y) wieder.
distance_to_object(obj) Gibt die Distanz der Instanz zur nächstgelegenen Instanz des angegebenen Objektes (obj) an.
position_empty(x, y) Gibt an, ob sich nichts an Position (x,y) befindet.
position_meeting(x, y, obj)Gibt an, ob an Position (x,y) eine Instanz von Objekt (obj) vorhanden ist. obj kann ein Objekt sein, ein "instance id" oder eins der Schlüsselwörter: "self"(selbst), "other"(andere), oder "all"(alle).
Alternative Versionen
Auch verfügbar in:
Download helpfile