11.12.2012 Aufrufe

3D GAMESTUDIO-Magazin Ausgabe 01 | Oktober 20051

3D GAMESTUDIO-Magazin Ausgabe 01 | Oktober 20051

3D GAMESTUDIO-Magazin Ausgabe 01 | Oktober 20051

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

vec_sub(ziel_pos,player.x); // Bestimmung des Richtungsvektors<br />

vec_to_angle(player.pan,ziel_pos); // Drehung der Playerentity in Richtung der<br />

Zielpos.<br />

}<br />

player.tilt = 0;<br />

player.ziel = 1; // Spieler hat Zielposition zugewiesen<br />

Zeile 1-7 beziehen sich auf die Berechnung der x- und y-Position des Cursors und Umrechnung<br />

dieser Koordinaten mit Hilfe des "vec_for_screen" Befehls in einen Vektor. Diese Vektoren<br />

benötigen wir um mit dem "trace" Befehl von einem gedachten Punkt, direkt hinter dem Bildschirm<br />

hinein ins Level zutracen und zwar 5000 Quants hinter den Bildschirm. Der Schnittpunkt mit der<br />

Levelgeometrie wird im "target" Vektor gespeichert und gibt uns somit unseren Zielpunkt an.<br />

Danach bestimmen wir den Richtungsvektor von der Playerposition zur Zielposition mit "vec_sub"<br />

und anschließend drehen wir noch den Player in Richtung der Zielposition mit Hilfe des Befehls<br />

"vec_to_angle".<br />

Funktion "gravity_entity()"<br />

Folgt nun eine Funktion die verhindert das eine Entity aus irgendwelchen unvorhersehbaren<br />

Gründen in der Luft schwebt ohne herunter zufallen. Die "gravity_entity" Funktion.<br />

function gravity_entity()<br />

{<br />

vec_set (temp.x,nullvector);<br />

vec_set(temp,my.x);<br />

temp.z -=4000;<br />

trace_mode = ignore_me + ignore_sprites + use_box + ignore_models;<br />

result = trace(my.x,temp); // Trace auf den Boden<br />

if (result > 5)<br />

{<br />

}<br />

else<br />

{<br />

}<br />

force.z = -5; // Schwerkraft<br />

friction = 0.1;//Reibung<br />

force.z = -0.5 * result; // Boden-Elastizität<br />

friction = 0.5; // Bodenreibung<br />

my._vz_entity = time * force.z + max(1-time * friction,0) * my._vz_entity; //<br />

Geschw. vert.<br />

}<br />

abs_dist.z = time * my._vz_entity; // Distanz vertikal<br />

Die erste Zeile verwenden wir dazu um den Vektor "temp" zu löschen, also alle Werte auf Null zu<br />

setzen. Danach überschreiben wir den Vektor mit den Koordinaten der Entity. Nachdem wir der<br />

"temp.z" Variablen einen Wert 4000 Quants unter der Entity zugewiesen haben, führen wir einen<br />

"trace" von der EntityPosition zu einem Punkt 4000 Quants darunter durch. Stößt der Trace auf ein<br />

Hindernis wird diese Entfernung in der Variablen "result" gespeichert und dient uns somit zur<br />

weiteren Berechnung. Ist das Ergebnis der Result-Variablen größer als 5 Quants setzen wir die<br />

Schwerkraft auf den Wert -5 und die Reibung, da wir uns ja folglich in der Luft befinden, auf einen<br />

sehr niedrigen Wert hier 0.1. Sollte das Gegenteil der Fall sein und unser "result" ist kleiner als 5<br />

oder hat gar einen negativen Wert, was bedeuten würde, daß die Entity schon in den Boden<br />

<strong>3D</strong> <strong>GAMESTUDIO</strong>-<strong>Magazin</strong> ■ <strong>Ausgabe</strong> <strong>01</strong> | <strong>Oktober</strong> 2005 │70

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!