Constraints

Slider Constraint

Omezí relativní pohyb na jedinou přímou world-space osu a uzamkne ostatní translace i veškerou relativní rotaci.

jolt_slider() propojí dvě různá managed tělesa; jolt_slider_world() připojí jedno managed těleso přímo k pevnému world body Jolt. Obě varianty vracejí stejné managed rozhraní JoltConstraint.

Syntaxe#

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

Argumenty#

ArgumentTypPopis
body_a / body_bJoltBodyDvě různá živá tělesa v managed výchozím worldu.
bodyJoltBodyJediné živé těleso pro jolt_slider_world().
anchor_x / anchor_y / anchor_zRealSpolečný world-space attachment point.
axis_x / axis_y / axis_zRealKonečná nenulová povolená osa translace; interně se normalizuje.
optionsStruct nebo undefinedVolitelné limity, collision, stav, motor a pružina.

Options#

PoleVýchozíPopis
limits_min-1000000Minimální position ve world units; musí být <= 0.
limits_max1000000Maximální position ve world units; musí být >= 0.
collisiontrueZda uživatelská tělesa mohou kolidovat; world varianta hodnotu ignoruje.
enabledtruePočáteční stav solveru.
motor_max_force100Konečný nezáporný limit lineární force.
spring_frequency2Frequency pružiny position motoru; při vytvoření se použije jen tehdy, je-li pole přítomné.
spring_damping1Damping spojený se spring_frequency.
motor_velocitynenastavenoPočáteční target ve world units za sekundu; vybere velocity režim.
motor_positionnenastavenoPočáteční target ve world units; vybere position režim.

Metody#

MetodaVýsledekChování Slider
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 konečné lineární limity obsahující nulu.
get_limits()StructVrátí {minimum, maximum} ve world units.
get_position()RealAktuální signed relativní position podél osy.
set_motor_velocity(velocity)BooleanVybere velocity režim v units/s.
set_motor_position(position)BooleanVybere position režim ve world units.
enable_motor(enabled)BooleanMotor vypne nebo obnoví jeho předchozí režim.
set_motor_max_force(force)BooleanAktualizuje nezáporný limit lineární force.
get_motor_state()StructVrátí režim, targets, force limit a nastavení pružiny.
set_spring(frequency, damping) / get_spring()Boolean / StructŘídí native pružinu position motoru.
get_impulse()RealPoslední motor solver impulse, nikoli force za sekundu.

Souřadnice a pravidla motoru#

  • Kladná position sleduje zadanou osu; její obrácení obrátí position i směr motoru.
  • Dvě kolmé translace a celá relativní rotace jsou uzamčené.
  • Velocity a position setters vyberou a zapnou svůj režim. Pružina působí pouze v position režimu.
  • Jsou-li přítomny oba creation targets, motor_position se použije poslední a bude aktivní.

Příklad: zásuvka#

GML
var cabinet = jolt_box_create_static(4, 3.5, 2, 3.6, 3.8, 0.5);
var drawer  = jolt_box_create_dynamic(4, 3.5, 2.75, 3, 2.6, 0.7, { mass: 4 });
var slider = jolt_slider(cabinet, drawer, 4, 3.5, 2.75, 0, -1, 0, {
    limits_min: 0,
    limits_max: 2,
    collision: false
});

Příklad: poháněný píst#

GML
var slider = jolt_slider(frame, piston, 0, 0, 2, 1, 0, 0, {
    limits_min: -1.5, limits_max: 1.5,
    motor_max_force: 80,
    spring_frequency: 3, spring_damping: 0.7,
    motor_position: 1
});
slider.set_motor_velocity(-2);
slider.set_motor_position(1);
var position = slider.get_position();

World varianta#

GML
var drawer = jolt_box_create_dynamic(0, 0, 1, 1.8, 2.5, 0.5, { mass: 3 });
var rail = jolt_slider_world(drawer, 0, 0, 1, 0, 1, 0, {
    limits_min: -0.5,
    limits_max: 0.5
});

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 nesmí mít nulovou délku.
  • Limity musí být konečné a splnit minimum <= 0 <= maximum.
  • Motor targets musí být konečné; force, frequency a damping 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_sliderjolt_slider(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/osa; limits_min/max default±1000000m, rozsah obsahuje0. Volitelné spring_frequency Hz a spring_damping default 1.
jolt_slider_worldjolt_slider_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/osa; limits_min/max default±1000000m, rozsah obsahuje0. Volitelné spring_frequency Hz a spring_damping default 1.