‹›
Constraints

Distance Constraint

Drží dva attachment points v nastavitelném rozsahu minimální a maximální vzdálenosti.

Distance constraint vytváří pevnou tyč, lano s vůlí nebo tlumenou pružinu bez renderování lana. Body-to-body attachment points se při vytvoření zadávají ve world space a interně se uloží relativně k tělesům.

Syntaxe#

Syntax
jolt_distance(body_a, body_b, options=undefined)
jolt_distance_world(body, anchor_x, anchor_y, anchor_z, min_distance, max_distance, options=undefined)

Body-to-body options#

PoleVýchozíPopis
point_apozice body_aWorld-space attachment point na body_a při vytvoření.
point_bpozice body_bWorld-space attachment point na body_b při vytvoření.
min_distanceaktuální vzdálenostMinimální povolená vzdálenost ve world units.
max_distanceaktuální vzdálenostMaximální povolená vzdálenost ve world units.
spring_frequencyneaplikuje seJe-li přítomno, zapne native frequency/damping spring.
spring_damping1Damping spojený se spring_frequency.
collisiontrueZda připojená uživatelská tělesa mohou kolidovat.
enabledtruePočáteční stav solveru.

Argumenty world varianty#

ArgumentVýznam
bodyŽivé managed těleso připojené k pevnému světu.
anchor_x / anchor_y / anchor_zPevný world-space bod.
min_distance / max_distanceExplicitní seřazený rozsah délky ve world units.
optionsenabled a volitelné spring_frequency se spring_damping.

Metody#

MetodaVýsledekChování Distance
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 nezáporný seřazený distance range.
get_limits()StructVrátí {minimum, maximum} ve world units.
set_spring(frequency, damping)BooleanNastaví nezápornou native spring frequency a damping.
get_spring()StructVrátí {frequency, damping}.
get_current_distance()RealAktuální geometrická vzdálenost attachment points.
get_impulse()RealPoslední signed solver impulse podél distance osy.

Pevná délka, vůle a pružina#

  • Stejné minimum a maximum vytvoří tyč nebo lano s pevnou délkou.
  • Rozsah dovolí volný pohyb, dokud attachment point nedosáhne některé hranice.
  • Pružina změkčuje korekci; vyšší frequency je tužší a damping potlačuje kmitání.
  • Jde pouze o matematickou geometrii bez rope collision, ohýbání, wrappingu nebo renderování.

Příklad: tlumené lano#

GML
var anchor = jolt_box_create_static(0, 0, 6, 0.4, 0.4, 0.4);
var load   = jolt_box_create_dynamic(0, 0, 2, 1, 1, 1, { mass: 5 });

var tether = jolt_distance(anchor, load, {
    point_a: { x: 0, y: 0, z: 6 },
    point_b: { x: 0, y: 0, z: 2 },
    min_distance: 2,
    max_distance: 4,
    spring_frequency: 3,
    spring_damping: 0.65,
    collision: false
});

Příklad: přímé připojení ke světu#

GML
var load = jolt_box_create_dynamic(0, 0, 2, 1, 1, 1, { mass: 5 });
var tether = jolt_distance_world(load, 0, 0, 6, 2, 4, {
    spring_frequency: 2,
    spring_damping: 0.7
});

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.
  • Attachment structy musí obsahovat konečné hodnoty x, y a z.
  • Distance limity musí být konečné, nezáporné a seřazené minimum <= maximum.
  • Frequency a damping musí být konečné a nezáporné.

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_distancejolt_distance(body_a, body_b, options = undefined)Dvě tělesa; world-space point_a/b default jejich originy, min/max_distance default jejich aktuální vzdálenost m, 0<=min<=max. Optional spring_frequency Hz/damping1. Constraint/undefined; kontroluj následnou chybu options.
jolt_distance_worldjolt_distance_world(body, anchor_x, anchor_y, anchor_z, min_distance, max_distance, options = undefined)Dynamic Body a světová kotva XYZ m + min/max délka m; druhý bod je origin tělesa. Constraint/undefined, enabled true; optional spring_frequency/damping1.
JoltConstraint.get_current_distanceJoltConstraint.get_current_distance()Pouze Distance: současná vzdálenost kotev v m; 0 při chybě.
JoltConstraint.get_limit_springJoltConstraint.get_limit_spring(axis)SixDOF: {frequency, damping}, Hz a poměr. Motor osy 0..5, limit pouze 0..2; při chybě mohou složky obsahovat nativní náhradní 0.
JoltConstraint.get_springJoltConstraint.get_spring()Distance/Hinge/Slider/Path: {frequency, damping}, Hz a poměr; undefined při chybě či jiném typu.
JoltConstraint.set_limit_springJoltConstraint.set_limit_spring(axis,frequency,damping)SixDOF pouze posuvné axis 0..2; konečné frequency ≥0 Hz a damping ≥0 jako poměr. Rotační osy odmítne, výsledek Boolean.
JoltConstraint.set_springJoltConstraint.set_spring(frequency, damping)Distance pružina limitu nebo Slider pružina motoru: konečné frequency ≥0 Hz, damping ≥0 (poměr). Boolean.