|
||||||
|
|
||||||
|
Beispiel 1: Levelbegrenzung des Players |
||||||
|
Die Levelbegrenzung, mit Hilfe von unsichtbaren Blöcken, kann zum Problem werden wenn das Gelände (Terrain) sehr kurvenreich ist. Berge, Täler oder gewundene Wege zwischen Hügeln mit der Blocktechnik vor dem Betreten zu schützen ist umfangreich und die vielen Blöcke dienen nicht gerade der Übersichtlichkeit im WED. |
||||||
|
Ich zeichne die Grenze einfach mit auf die Colormap ein. Zu beachten ist nur das diese schön dick eingezeichnet wird. Denn falls euer Player springen kann muß die gezeichnete Grenze natürlich breiter sein als seine Sprunglänge. Probiert es aus. Nehmt die tercolor.wdl von Seite 1 für dieses Beispiel. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Nun wird nur noch eine kleine Änderung des Player MOVE Scriptes benötigt. |
||||||
|
Ich gehe hier davon aus das auch bei euch der Player ähnlich der folgenden Zeile bewegt wird: |
||||||
|
|
||||||
|
move ( my, dist, nullvector ); |
||||||
|
|
||||||
|
Hier wird die Entity (Player) mit einer relativen Geschwindigkeit ihrem Winkel entsprechend bewegt. All das steht im Vektor DIST. Der Inhalt von DIST wird weiter vorher im Movescript festgelegt. Es werden Mouse/Joystickbewegungen oder Tastaturkeys ausgewertet und in Winkel und Geschwindigkeit der Entity umgesetzt und endlich münden alle im Vektor DIST. Natürlich ist der Name DIST nur ein Beispiel und kann auch ganz anders heissen. |
||||||
|
VOR DIESE MOVE ZEILE kommen nun ein paar neue Zeilen um die Levelgrenze zu aktivieren. Die darin enthaltenen Variablen müßt ihr natürlich vorher am Anfang euerer move.wdl definieren. Ich schreibe sie hier mit hin. Der rgb_vec Vektor enthält die aktuelle Farbe der Colormap unter den Füßen des Players. (Er wurde schon in den mitgelieferten wdl's definiert). |
||||||
|
|
||||||
|
var border_free[3]; //dieser Vektor speichert die Playerposition, solange diese sich außerhalb der Levelgrenze befindet. |
||||||
|
var border[3] = 000,000,255; //dieser Vektor enthält die Farbe der Levelgrenze, hier ROT. Beachte Reihenfolge BGR !!! |
||||||
|
|
||||||
|
if (rgb_vec.blue != border.blue || rgb_vec.green != border.green || rgb_vec.red != border.red) { |
||||||
|
border_free.x = player.x; |
||||||
|
border_free.y = player.y; |
||||||
|
border_free.z = player.z; } |
||||||
|
if (rgb_vec.blue == border.blue && rgb_vec.green == border.green && rgb_vec.red == border.red) { |
||||||
|
vec_diff ( dist.x , border_free.x, player.x ); } |
||||||
|
|
||||||
|
Das war es schon. Solange der Player die Farbgrenze (border) nicht betritt wird die Playerposition in border_free zwischengespeichert. Betritt der Player die Grenze wird die Bewegungsrichtung des Players in DIST geändert. Und zwar von der augenblicklichen Playerposition auf der Grenze, zur letzten Position außerhalb der Grenze(border_free). Der Player wird dadurch abgebremst und zurückgeworfen. Egal ob er nun vor- oder rückwärts in die Grenze läuft. |
||||||
|
|
||||||
|
Beispiel 2: Floramap des Levels |
||||||
|
Die Flora, bestehend aus Bäumen und Sträuchern, kann mühsam Stück für Stück ins Level gesetzt werden oder per Zufall generiert. Wenn per Zufall generiert steht natürlich das Problem das ein Baum nicht mitten auf dem Weg wachsen soll. Es müssen also Gebiete definiert werden, wo etwas stehen soll und wo nicht. Schon hier könnte die Colormap verwendet werden um zu definieren das bei den Farben der Wege keinerlei Bäume entstehen sollen. |
||||||
|
Hier aber ein anderes Beispiel. Angenommen ihr habt zwei Baummodelle. Nun für jedes eine Farbe festlegen und die Colormap an den Stellen mit einzelnen Pixeln einfärben wo die Bäume entstehen sollen. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Auch für dieses Beispiel gibt es ein fertiges Script. floramap.wdl DOWNLOAD |
||||||
|
Anders als im colormap.wdl oder tercolor.wdl wird hier aber nicht ständig die Farbe der Colormap unter den Füßen geprüft, sondern hier wird einmalig die Colormap Pixel für Pixel durchgescannt und bei einem Treffer der entsprechende Baum ins Level gesetzt. Diese Aktion sollte also bei Start des Levels, noch bevor die Kamera aktiv ist durchgeführt werden. Nicht enthalten im Script ist LOD. Also das aus- b.z.w. einblenden der Bäume bei entsprechendem Abstand zur Kamera um Ressourcen zu sparen. Mir ging es nur um das exakte Einsetzen von Flora im Terrain Level. |
||||||
|
|
||||||
|
|