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

Transformationen

Transformationen erlauben es, den Ort an dem gezeichnet wird, zu verändern. Beispielsweise kann die Funktion zum Blöcke zeichnen nur Achsenparallele Blöcke zeichnen. Wenn man zuerst eine Rotations-Transformation definiert, kann man auch rotierte Blöcke zeichnen. Sprites werden auch immer parallel zur xy-Ebene gezeichnet. Auch hier schafft eine Transformation Abhilfe. Es gibt zwei Arten von Funktionen: Solche, die eine Transformation setzen, und solche, die sie addieren.

d3d_transform_set_identity() Setzt die Transformation zurück.
d3d_transform_set_translation(xt, yt, zt) Setzt die Transformation auf eine Verschiebung um den angegebenen Vektor.
d3d_transform_set_scaling(xs, ys, zs) Setzt die Transformation auf ein Scaling mit den angegebenen Werten.
d3d_transform_set_rotation_x(angle) Setzt die Transformation auf eine Rotation um die x-Achse mit dem angegebenen Winkel.
d3d_transform_set_rotation_y(angle) Setzt die Transformation auf eine Rotation um die x-Achse mit dem angegebenen Winkel.
d3d_transform_set_rotation_z(angle) Setzt die Transformation auf eine Rotation um die x-Achse mit dem angegebenen Winkel.
d3d_transform_set_rotation_axis(xa, ya, za, angle) Setzt die Transformation auf eine Rotation um die angegebene Achse mit dem angegebenen Winkel.
d3d_transform_add_translation(xt, yt, zt) Fügt eine Verschiebung um die angegebenen Werte hinzu.
d3d_transform_add_scaling(xs, ys, zs) Fügt ein Scaling mit den angegebenen Werten hinzu.
d3d_transform_add_rotation_x(angle) Fügt eine Rotation um die x-Achse um den angegeben Winkel hinzu.
d3d_transform_add_rotation_y(angle) Fügt eine Rotation um die y-Achse um den angegeben Winkel hinzu.
d3d_transform_add_rotation_z(angle) Fügt eine Rotation um die z-Achse um den angegeben Winkel hinzu.
d3d_transform_add_rotation_axis(xa, ya, za, angle) Fügt eine Rotation um die angegebene Achse um den angegeben Winkel hinzu.
Bedenke, dass Rotationen und Scalings immer relativ zum Ursprung der Welt sind. Wenn das Objekt, das du zeichnen willst, nicht beim Ursprung ist wird es sich bei diesen Transformationen auch woanders hinbewegen. Um also z.B. ein Objekt um seine eigene x-Achse zu rotieren, muss es zuerst zum Ursprung Verschoben werden. Dafür sind die Funktionen zum hinzufügen gut.

Die folgenden Beispiele werden das wahrscheinlich besser erklären. Stell dir vor, wir hätten ein sprite spr, dass wir auf der Position (100,100,10) zeichnen wollen. Dafür kann man folgenden Code benutzen.

{
d3d_transform_set_translation(100,100,10);
draw_sprite(spr,0,0,0);
d3d_transform_set_identity();
}

Weil wir jetzt eine Verschiebung benutzen, sollten wir das Sprite bei der Position (0,0) zeichnen. (Das setzt voraus, dass die depth 0 ist. Wenn du nicht sicher bist, dann setze die depth zuerst.) Wenn wir das in unserem EGO-Shooter verwenden würden, könnten wir das sprite nicht sehen, weil es immer noch parallel zu xy-Ebene ist. Wir müssen um 90 Grad an der x- oder y-Achse drehen. Deshalb fügen wir eine Rotation hinzu. Merke dir die Reihenfolge: zuerst drehen, dann verschieben. Folgender Code kann verwendet werden.

{
d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
d3d_transform_add_translation(100,100,10);
draw_sprite(spr,0,0,0);
d3d_transform_set_identity();
}

Manchmal will man kurzzeitig die derzeitige Transformation speichern, z.B. um eine zusätzliche Transformation hinzuzufügen und die alte dann wieder zu aktivieren (das passiert oft, wenn man hierarchische Models zeichnet). Deswegen kann man die aktuelle Transformation auf einen Stack legen und sie später wieder davon nehmen. Folgenden Funktionen existieren:

d3d_transform_stack_clear() Leert den Stack.
d3d_transform_stack_empty() Gibt zurück, ob der Stack leer ist.
d3d_transform_stack_push() legt die derzeitige Transformation auf den Stack und gibt zurück, ob genug platz dafür war. (Nach einiger Zeit wird dir der Raum auf dm Stack ausgehen)
d3d_transform_stack_pop() Nimmt die Oberste Transformation vom Stack und aktiviert sie. Gibt zurück, ob eine Transformation auf dem Stack war.
d3d_transform_stack_top() Aktiviert die oberste Transformation, nimmt sie aber nicht von Stack. Gibt zurück, ob eine Transformation auf dem Stack war.
d3d_transform_stack_discard() Entfernt die oberste Transformation vom Stack, aktiviert sie aber nicht. Gibt zurück, ob eine Transformation auf dem Stack war.

Transformationen zu benutzen ist sehr mächtig, aber du musst immer daran denken, die Transformation zurück zu setzen, wenn du fertig bist.

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