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#

Syntax
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ázevVýchozíPopis
body_a / body_bpovinnéDvě různá živá managed tělesa.
bodypovinnéJediné těleso pro world variantu.
anchor_x / anchor_y / anchor_zpovinnéSpolečný konečný world-space attachment point.
collisiontruePouze body-to-body: zda dvojice může kolidovat.
enabledtruePočáteční stav solveru.

Metody#

MetodaVýsledekChování Point
is_valid()BooleanOvěří managed wrapper i jeho native generační handle.
get_native_handle()RealVrátí neprůhledný native handle, nebo 0 při neplatném constraintu.
destroy()BooleanIdempotentně uvolní pouze constraint; připojená tělesa zůstanou živá.
set_enabled(enabled) / get_enabled()BooleanDoč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()RealMagnitude tříosého position solver impulse z posledního update.

Příklad: kyvadlo#

GML
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#

GML
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íkSignaturaKontrakt operace
jolt_pointjolt_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_worldjolt_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.