Constraints

Cone Constraint

Drží shared anchor pohromadě, omezuje swing na kruhový kužel a nechává twist kolem osy volný.

Cone je vhodný pro závěsy, jednoduché ball joints a články, které se mohou vychýlit maximálním úhlem, ale nepotřebují twist limits. Pro eliptický swing, twist limits nebo angular motory použijte SwingTwist.

Syntaxe#

Syntax
jolt_cone(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, options=undefined)
jolt_cone_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, options=undefined)

Argumenty a options#

NázevVýchozíPopis
body_a / body_bpovinnéPropojená managed tělesa.
bodypovinnéJediné těleso pro world variantu.
anchor_x / anchor_y / anchor_zpovinnéSpolečný world-space pivot.
axis_x / axis_y / axis_zpovinnéKonečný nenulový referenční směr; interně se normalizuje.
max_anglepovinnéSwing half-angle od 0 do 180 stupňů.
collisiontrueBody-to-body collision state; world varianta hodnotu ignoruje.
enabledtruePočáteční stav solveru.

Úhlové chování#

  • Aktuální osa se může od referenční osy vychýlit nejvýše o max_angle.
  • Relativní twist kolem této osy zůstává neomezený.
  • Limit 0 stupňů uzamkne swing; 180 stupňů znamená prakticky volný swing.
  • Public API používá stupně a interně je převádí na Jolt radiány.

Metody#

MetodaVýsledekChování Cone
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.
set_limit(angle)BooleanNastaví swing half-angle v rozsahu 0..180 stupňů.
get_limit()RealVrátí maximální swing ve stupních.
get_angle()RealVrátí aktuální swing angle ve stupních.
get_impulse()RealVrátí poslední souhrnný position/angular solver impulse.

Příklad: zavěšená lampa#

GML
var lamp = jolt_box_create_dynamic(0, 0, 3.5, 0.7, 0.7, 1, { mass: 3 });
var joint = jolt_cone_world(
    lamp,
    0, 0, 4,
    0, 0, -1,
    35
);

Body-to-body příklad#

GML
var joint = jolt_cone(upper, lower, 0, 0, 4.5, 0, 0, -1, 45, {
    collision: false
});
joint.set_limit(30);
var swing = joint.get_angle();

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.
  • Anchor a axis komponenty musí být konečné a osa musí mít nenulovou délku.
  • max_angle a runtime limit musí zůstat mezi 0 a 180 stupni.
  • Cone nemá motor ani pružinu. Pro poháněné angular řízení použijte SwingTwist nebo SixDOF.

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_conejolt_cone(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, 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. Světová kotva/osa a max_angle ve stupních 0..180.
jolt_cone_worldjolt_cone_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, max_angle, 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. Světová kotva/osa a max_angle ve stupních 0..180.
JoltConstraint.set_rotationJoltConstraint.set_rotation(angle)Pouze Hinge: konečný referenční úhel ve stupních; Boolean. Mění referenční rámec, neteleportuje těleso.