Constraints
Point Constraint
Udržuje jeden material point na každém tělese ve stejném místě a ponechává veškerou relativní rotaci volnou.
Point je nejjednodušší ball-and-socket spoj. Při vytvoření používá jeden shared world-space anchor, uloží local attachment pro každé těleso a nevynucuje angular limits ani motor.
Syntaxe#
jolt_point(body_a, body_b, anchor_x, anchor_y, anchor_z, options=undefined)
jolt_point_world(body, anchor_x, anchor_y, anchor_z, options=undefined)Argumenty a options#
| Název | Výchozí | Popis |
|---|---|---|
| body_a / body_b | povinné | Dvě různá živá managed tělesa. |
| body | povinné | Jediné těleso pro world variantu. |
| anchor_x / anchor_y / anchor_z | povinné | Společný konečný world-space attachment point. |
| collision | true | Pouze body-to-body: zda dvojice může kolidovat. |
| enabled | true | Počáteční stav solveru. |
Metody#
| Metoda | Výsledek | Chování Point |
|---|---|---|
| is_valid() | Boolean | Ověří managed wrapper i jeho native generační handle. |
| get_native_handle() | Real | Vrátí neprůhledný native handle, nebo 0 při neplatném constraintu. |
| destroy() | Boolean | Idempotentně uvolní pouze constraint; připojená tělesa zůstanou živá. |
| set_enabled(enabled) / get_enabled() | Boolean | Dočasně odebere nebo obnoví účast v solveru bez zničení constraintu. |
| set_collision_enabled(enabled) / get_collision_enabled() | Boolean | Řídí kolize dvojice těles. World varianty vždy vracejí false. |
| get_impulse() | Real | Magnitude tříosého position solver impulse z posledního update. |
Příklad: kyvadlo#
var support = jolt_box_create_static(0, 0, 6, 0.5, 0.5, 0.5);
var weight = jolt_box_create_dynamic(0, 0, 3, 0.8, 0.8, 0.8, { mass: 4 });
var joint = jolt_point(support, weight, 0, 0, 5.5, {
collision: false
});
weight.add_impulse(4, 0, 0);World varianta#
var ball = jolt_sphere_create_dynamic(0, 0, 3, 0.5, { mass: 2 });
var pivot = jolt_point_world(ball, 0, 0, 4);Chyby a životní cyklus#
- Body-to-body creatory vyžadují dvě různá živá managed JoltBody ve stejném managed výchozím worldu.
- Alespoň jedno připojené těleso musí být pohyblivé; nepodporovaná static-static dvojice v native Jolt selže.
- Constructory při úspěchu vracejí managed JoltConstraint, při validační nebo native chybě undefined.
- Zničení kteréhokoli připojeného tělesa nejprve automaticky zničí a zneplatní jeho constrainty.
- Po selhání creatoru nebo metody čtěte jolt_get_error(), zejména u nedůvěryhodných hodnot.
- Shared anchor musí být konečný.
- Point nemá limity, pružinu ani motor; type-incompatible metoda JoltConstraint zaznamená invalid-operation error.
- Off-centre anchor přirozeně dovolí, aby constraint force vytvářela torque na tělese.
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| jolt_point | jolt_point(body_a, body_b, anchor_x, anchor_y, anchor_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Společná světová kotva XYZ m, volná rotace. |
| jolt_point_world | jolt_point_world(body, anchor_x, anchor_y, anchor_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Společná světová kotva XYZ m, volná rotace. |