Constraints

Hinge Constraint

Drží shared anchor pohromadě a dovoluje relativní rotaci kolem jediné world-space osy.

Hinge použijte pro dveře, páky, kola a poháněné čepy. Nabízí úhlové limity ve stupních, měnitelnou referenční rotaci, aktuální úhel a velocity nebo position motor omezený torquem.

Syntaxe#

Syntax
jolt_hinge(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)
jolt_hinge_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)

Argumenty#

ArgumentTypPopis
body_a / body_bJoltBodyDvě propojená managed tělesa.
bodyJoltBodyJediné těleso pro jolt_hinge_world().
anchor_x / anchor_y / anchor_zRealSpolečný world-space pivot.
axis_x / axis_y / axis_zRealKonečná nenulová world-space osa rotace; interně se normalizuje.
optionsStruct nebo undefinedLimity, collision, počáteční stav a volitelné nastavení motoru.

Options#

PoleVýchozíPopis
limits_min-180Minimální úhel ve stupních vzhledem k referenční orientaci.
limits_max180Maximální úhel ve stupních; musí být >= limits_min.
collisiontrueZda připojená uživatelská tělesa mohou kolidovat; jolt_hinge_world() hodnotu ignoruje.
enabledtruePočáteční stav solveru.
motor_max_torque100Konečný nezáporný symetrický limit motor torque v N m.
motor_velocitynenastavenoPočáteční angular velocity v radiánech za sekundu; vybere velocity režim.
motor_positionnenastavenoPočáteční cílový úhel ve stupních; vybere position režim.

Metody#

MetodaVýsledekChování Hinge
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_limits(minimum, maximum)BooleanAktualizuje seřazené limity ve stupních a probudí obě tělesa.
get_limits()StructVrátí {minimum, maximum} ve stupních.
set_rotation(angle)BooleanPosune nulu/referenční orientaci bez pohybu těles nebo anchoru.
get_angle()RealAktuální signed úhel ve stupních vzhledem k referenci.
set_motor_velocity(rad_per_second)BooleanVybere a zapne velocity režim.
set_motor_position(degrees)BooleanVybere a zapne position režim.
enable_motor(enabled)BooleanMotor vypne nebo obnoví jeho poslední režim.
set_motor_max_torque(torque)BooleanNastaví symetrický torque limit.
set_motor_spring(frequency, damping)BooleanNaladí native pružinu position motoru.
get_motor_state()StructVrátí režim, targets, maximální torque a nastavení pružiny.
get_spring()StructVrátí frequency a damping position motoru.
get_impulse()RealPoslední motor solver impulse, nikoli torque za sekundu.

Příklad: dveře s limitem#

GML
var frame = jolt_box_create_static(-1.8, 0, 2, 0.3, 0.3, 4);
var door  = jolt_box_create_dynamic(0, 0, 2, 3.6, 0.25, 4, { mass: 18 });

var hinge = jolt_hinge(frame, door, -1.8, 0, 2, 0, 0, 1, {
    limits_min: 0,
    limits_max: 110,
    collision: false
});

Příklad: position a velocity motor#

GML
hinge.set_motor_max_torque(45);
hinge.set_motor_spring(3, 0.8);
hinge.set_motor_position(90); // stupně

// Později přepněte na velocity režim.
hinge.set_motor_velocity(4);  // radiány za sekundu

var angle = hinge.get_angle();
var state = hinge.get_motor_state();

Referenční rotace#

set_rotation(angle) změní nulu Hinge a zachová handle, anchor, limity, collision state i motor settings. Existující limity se následně měří od nové reference.

World varianta#

GML
var lever = jolt_box_create_dynamic(0, 0, 2, 4, 0.3, 0.3, { mass: 6 });
var pivot = jolt_hinge_world(lever, -2, 0, 2, 0, 1, 0, {
    limits_min: -35,
    limits_max: 35
});

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.
  • Limity musí být konečné a seřazené; motor torque musí být konečný a nezáporný.
  • Obsahují-li options současně motor_velocity i motor_position, position se aplikuje poslední a bude aktivní.

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_hingejolt_hinge(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_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. Světová kotva/nenulová osa; limits_min/max default-180/180°, min[-180, 0], max[0, 180].
jolt_hinge_worldjolt_hinge_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_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. Světová kotva/nenulová osa; limits_min/max default-180/180°, min[-180, 0], max[0, 180].
JoltConstraint.get_angleJoltConstraint.get_angle()Aktuální Hinge/Cone úhel ve stupních; při neplatném/nepodporovaném constraintu nebo chybě 0 a chybový stav.
JoltConstraint.get_friction_torqueJoltConstraint.get_friction_torque()Pouze SwingTwist; konečný nezáporný odporový moment v N·m. Setter Boolean, getter číslo nebo 0 při chybě.
JoltConstraint.set_friction_torqueJoltConstraint.set_friction_torque(torque)Pouze SwingTwist; konečný nezáporný odporový moment v N·m. Setter Boolean, getter číslo nebo 0 při chybě.