Startseite | Anpassen | Blog | Extras | Anmelden | Info
Handbuch | D&D icons | GML Parser | Archiv | Iso City
Benutzername: Passwort:  
Über | Funktionen | Verzeichnis | Banner | Kontakt

Den Game Maker benutzen
Den Game Maker benutzen

Mehr über Objekte

Wenn du ein Objekt im erweiterten Modus erschaffst, kannst du mehr Parameter bestimmen.

Depth

Zuerst einmal, kannst du die Zeichenebene (Depth) der Instanzen eines Objektes bestimmen. Wenn Instanzen auf dem Bildschirm gezeichnet werden, geschieht dies in der Reihenfolge der Zeichenebenen. Instanzen mit dem höchsten Depth-Wert, werden zuerst gezeichnet (auf einem Stapel ganz unten, wenn man draufschaut). Instanzen mit dem kleinsten Wert werden zuletzt (obendrauf) gezeichnet. Wenn zwei Instanzen die gleichen Depth-Werte aufweisen, werden sie gezeichnet, wenn sie erschaffen (created) werden. Wenn du sichergehen willst, dass ein Objekt vor allen anderen liegt, gib ihm einen negativen Wert für Depth. Wenn es dahinter liegen soll, gib ihm einen möglichst hohen positiven Wert. Du kannst die Zeichenebene sogar während des Spiels ändern, indem du die Variable depth verwendest.

Persistent objects

Zweitens, kannst du bleibende Objekte erschaffen. Ein bleibendes Objekt übersteht den Wechsel von Raum zu Raum. Es verschwindet nur, wenn es explizit vernichtet wird. Du brauchst also nur eine Instanz des Objekts in den ersten Raum setzen und sie ist dann in allen darauffolgenden Räumen verfügbar. Dies ist nützlich z.B. für eine Hauptfigur, welche sich von Raum zu Raum durchspielt. Der Gebrauch von "persistent objects" ist eine mächtige Funktion, welche leicht zu Fehlern führt.

Parents

Oft sollen Objekte sich gleich verhalten und nur ein paar winzige Unterschiede besitzen. Beispielsweise soll sich ein Monster nach oben und unten bewegen und ein anderes nach links und rechts. Ansonsten Verhalten sie sich völlig gleich. In diesem Fall sollen alle Aktionen, bis auf 1 oder 2, gleich sein. Nun können wir wieder ein Objekt als Parent des anderen eintragen. Aber in diesem Fall bestimmen wir auch Ereignisse für die Kinder-Objekte. Diese Ereignisse "überschreiben" die Eltern-Ereignisse. Das bedeutet, das immer wenn ein Kind-Objekt ein Event besitzt, diese anstelle des Events des Eltern-Objektes ausgeführt wird. Wenn du auch das Eltern-Ereignis ausführen möchtest kannst du den "inherited" Event mit der entsprechenden Aktion benutzen.

Es ist in solchen Fällen üblich, zuerst ein Basisobjekt zu erschaffen. Dieses Objekt enthält die Eigenschaften aber wird nie im Spiel benutzt. Alle aktuellen Objekte, haben dieses Basisobjekt als "parent-object". "Parent-objects" könnten selbst wiederum "parent-objects" haben und so weiter (Schleifen sind nicht erlaubt). Auf diese Weise kannst du eine Hierarchie aufbauen. Es ist höchst nützlich, dein Spiel strukturiert zu halten und ich kann dir nur wärmstens empfehlen, dir diesen Mechanismus zu eigen zu machen.

Da gibt es noch eine zweite Möglichkeit "parent-objects" zu gebrauchen. Sie beinhaltet auch das Kollissionsverhalten für andere Objekte. Lass es mich an einem Beispiel erläutern. Angenommen, du hast 4 verschiedene Bodenobjekte. Wenn ein Ball den Boden berührt, soll er seine Bewegungsrichtung ändern. Dieses muss im "collision-event" vom Ball (Kollision Ball mit Boden) festgelegt werden. Weil da aber vier verschiedene Bodenobjekte sind, müsstest du vier verschiedene "collision-events" für ball festlegen. Wenn du jetzt aber ein Bodenobjekt zum "parent-object" der anderen Bodenobjekte machst, brauchst du nur einmal ein "collision-event" mit diesem "parent-object" machen - die anderen "erben" es ja. Diese anderen Kollisionen lösen ja das gleiche Ereignis aus. Hier sparst du eine Menge an Kopierarbeit.

Wie aufgezeigt, wann immer du ein Objekt benutzt, beziehst du immer dessen Nachkommen mit ein. Das geschieht, wenn du in einer "action" festlegst, dass Anweisung für Instanzen eines bestimmten Objektes gelten. Es passiert auch, wenn du das with()-Statement im GML-Code (Script,GML-Segment) verwendest (siehe unten). Und es greift, wenn du Funktionen wie instance_position aufrufst. Schliesslich arbeitet dieses Prinzip auch, wenn du auf Variablen in anderen Objekten verweist. Um beim obigen Beispiel zu bleiben: Wenn du ball1.speed auf 10 setzt, gilt das auch für ball2, ball3 und ball4.

Masks

Wenn zwei Instanzen sich berühren wird ein "collision event" (Kollisionsereignis) ausgelöst. Um zu bestimmen, ob zwei Instanzen sich berühren, nimmt man die zugehörigen Sprites als Entscheidungsgrundlage. In den meisten Fällen ist das auch gut so, manchmal aber soll die Abfrage einen anderen Umriss als Grundlage nehmen. Zum Beispiel, wenn du ein isometrisches Spiel machst, haben Objekte typischerweise eine Höhe (um einen 3D-Effekt zu erzielen). Für die Kollisionserkennung willst du aber nur den "Bodenteil" des Sprites benutzen. Dies kannst du machen, indem du ein 2. Sprite erstellst (mit den benötigten Dimensionen) und es als Maske für die Kollisionserkennung einsetzt.

Information

Der Knopf Object information zeigt beim Betätigen eine Überblicksansicht des Objektes, die auch ausgedruckt werden kann. Das ist besonders nützlich, wenn man mal den Überblick über die ganzen "events" und "actions" verloren hat.

Suche Suche


Alternative Versionen Alternative Versionen

Du kannst dieses Handbuch auch auf einer langen Seite (± 1.5 mb) ansehen.

Auch verfügbar in: Niederländisch Englisch Französisch

ZIP Download helpfile

Werbung Werbung

GameMaker Handbuch