phent_addforceglobal (ENTITY* entity,VECTOR* vForce,VECTOR* vPos );
phent_addforcelocal (ENTITY* entity,VECTOR* vForce,VECTOR* vPos );
Kraft und Drehmoment ("winkelmässige Kraft") werden auf
die angegebene Entity
an der
globalen (Welt-Koordinaten) oder lokalen (Entity-Koordinaten) Position
vPos angewendet.
Der
Kraft-Vektor
ist von der momentanen
Objektausrichtung unabhängig. Es wird nicht geprüft, ob sich die Position
tatsächlich innerhalb der Entity befindet. So kann man ihr, indem man ein
vPos weit
außerhalb der Entity wählt, einen starken Drall geben. Befindet sich
vPos dagegen
genau im Masse-Zentrum der Entity, wird es überhaupt keine Drehung geben
(in diesem Fall sollten Sie die Verwendung von
phent_addcentralforce in
Betracht ziehen).
phent_addforceglobal erzeugt das gleiche Resultat
wie das Aufrufen der beiden Anweisungen
phent_addcentralforce und
phent_addtorqueglobal mit
denselben Parametern.
Parameter:
entity |
die betreffende Entity |
vForce |
ein Vektor, der die Kraft festlegt, die auf die Entity ausgeübt
wird. |
vPos |
ein Vektor, der den `global point´ spezifiziert an dem vForce angewendet
wird. |
Rückgabewert:
1 bei Erfolg, sonst 0.
Bemerkungen:
- Kraft beschleunigt die Entity gemäß der Newtonschen Formel Geschwindigkeit
= Zeit * Kraft / Masse. Daher muß man zur höheren Beschleunigung
von schwereren Entities die Kraft entweder länger anwenden oder eine
stärkere Kraft benutzen.
- Vermeiden Sie es, Kräfte für eine von der Framerate abgängige
Dauer anzuwenden. Im schlimmsten Fall - beim Anwenden einer Krafr für
nur einen Framezyklus (time_frame) - wird die Geschwindigkeit
der Entity von der Framerate bestimmt. Ist die Engine-Framerate höher
als die Update-Rate der Physik (►ph_fps_max_lock),
kann es sogar passieren, dass im Framezyklus gar kein Physik-Update geschieht
und die Entity überhaupt nicht beschleunigt.
- Wollen Sie eine Entity unabhängig von der Framerate auf eine bestimmte
Geschwindigkeit beschleunigen, benutzen Sie stattdessen phent_addvelcentral.
- Kräfte sind additiv, das heisst, ein zweimaliges Aufrufen dieser Funktion
verdoppelt die Kraft.
- Aus Gründen der Effizienz sollten Sie, wenn möglich phent_addcentralforce der
Anweisung phent_addforceglobal vorziehen.
- Diese Funktion funktioniert auch mit PH_WAVE-Entities. Unter
Verwendung einer solchen, ist vecpoint eine globale (=world) Koordinate.
Vecforce.z
gibt die anfängliche Wasserverdrängungsmenge in Z-Richtung an.
Der Wertebereich für vecforce.z ist -1 bis +1, wobei dieser Wert in
Relation zur allgemeinen Terraingrösse steht. Das heisst ein Wert von
1 entpricht dem Abstand eines Vertex´ zu seinem Nachbarn in X-Richtung;
ein Wert von 0.5
wäre dann die Hälfte dieser Distanz. Es ist eine gute Idee, hier
kleine Werte zu verwenden.
Geschwindigkeit:
Schnell
Edition:
C P
Beispiel:
entity* myCrate;
var gravity[3] = 0,0, -386;
var crateMass= 10;
phent_settype( myCrate, PH_RIGID, PH_BOX );
phent_setmass( crateMass );
// force is three times as strong as gravity's pull, so we can lift up the entity, while pressing a key
while (key_pressed( key_for_str("L")) )
{
vec_set( temp, gravity );
vec_scale( temp, -3 * crateMass );
phent_addforceglobal( myCrate, nullvector, temp );
wait(1);
}
Siehe auch:
phent_addforcelocal, ph_selectgroup
► Aktuelle Version Online