Constraints

Fixed Constraint

Uzamkne celou relativní pozici a orientaci dvou těles nebo pevně připojí jedno těleso ke světu.

Fixed constraint funguje jako pevný svar. Body-to-body varianta zachová úplný relativní transform existující při vytvoření; world varianta upevní jedno těleso kolem explicitního world-space anchoru.

Syntaxe#

Syntax
jolt_fixed(body_a, body_b, options=undefined)
jolt_fixed_world(body, anchor_x, anchor_y, anchor_z, options=undefined)

Argumenty#

ArgumentTypPopis
body_a / body_bJoltBodyDvě různá živá managed tělesa, jejichž aktuální relativní transform se uzamkne.
bodyJoltBodyJediné živé těleso používané jolt_fixed_world().
anchor_x / anchor_y / anchor_zRealWorld-space anchor používaný world variantou.
optionsStruct nebo undefinedVolitelné počáteční nastavení collision a enabled.

Options#

PoleVýchozíPopis
collisiontrueZda se body_a a body_b mohou srážet. World varianta hodnotu ignoruje.
enabledtrueZda se nový constraint ihned účastní solveru.

Metody#

MetodaVýsledekChování
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.

Příklad: svařený mechanismus#

GML
var carrier = jolt_box_create_dynamic(0, 0, 2, 2, 1, 0.5, { mass: 8 });
var payload = jolt_box_create_dynamic(0, 0, 3, 1, 1, 1, { mass: 2 });

var weld = jolt_fixed(carrier, payload, { collision: false });
if (is_undefined(weld)) {
    var error = jolt_get_error();
    show_debug_message(error.context + ": " + error.message);
}

Tělesa zachovají počáteční vertikální rozestup jedné jednotky a otáčejí se jako jediná pevná sestava. Jejich samostatná hmotnost a inertia se nadále započítávají do solveru.

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

GML
var sign = jolt_box_create_dynamic(0, 0, 3, 2, 0.25, 1, { mass: 4 });
var mount = jolt_fixed_world(sign, 0, 0, 3);

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.
  • jolt_fixed_world() vyžaduje konečný anchor a jedno živé těleso v managed výchozím worldu.
  • Fixed nemá v managed API limity, motor, pružinu ani getter pozice nebo impulse.
  • Pokud má zůstat dostupný některý relativní stupeň volnosti, použijte užší typ constraintu.

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_fixedjolt_fixed(body_a, body_b, 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. Pevný relativní transform; world varianta bere světovou kotvu m.
jolt_fixed_worldjolt_fixed_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. Pevný relativní transform; world varianta bere světovou kotvu m.