‹›
Character

Pohyblivé platformy

Následuje posunující se nebo rotující tělesa a volitelně používá jejich lokální +Z jako směr nahoru.

Běžná ground velocity se používá automaticky, když postava stojí na pohyblivém tělese. set_reference_frame() navíc poskytuje explicitní sledování transformace pro rotující rámy, vozidla, lodě nebo prostředí s lokální gravitací.

Běžný pohyb platformy#

Na schůdném povrchu začne controller svou velocity hodnotou get_ground_velocity(). Posouvající se dynamic nebo kinematic platforma proto postavu unáší i bez referenčního rámce.

Rotující referenční rámec#

GML
player.set_reference_frame(platform_body, false);

// Vstup se otáčí společně s platformou.
player.set_move(input_x, input_y);
jolt_update();
  • Pozice a rotace postavy následují změnu center-of-mass transform tělesa.
  • Aktuální up vektor sleduje lokální +Z tělesa.
  • Existující velocity postavy se otočí společně s rámcem.
  • Lineární a úhlová velocity rámce se odečte z relativního contact solve, aby se pohyb neaplikoval dvakrát.

Lokální gravitace#

GML
player.set_reference_frame(planet_body, true);
player.set_reference_frame_gravity(true);

var up = player.get_up();

Při zapnuté gravitaci referenčního rámce působí gravitace proti aktuálnímu up vektoru. Jinak zůstává globálně ve směru -Z, přestože rámec otáčí pohyb.

Informace o rámci#

GML
var platform = player.get_reference_frame();
var linear = player.get_reference_frame_velocity();
var angular = player.get_reference_frame_angular_velocity();
var desired = player.get_world_move_velocity();

Opuštění rámce#

GML
player.clear_reference_frame();

Vyčištění obnoví +Z jako směr nahoru, otočí postavu zpět do world-up orientace, smaže cached frame motion a vypne režim lokální gravitace.

Čtení režimu gravitace#

GML
var uses_local_gravity = player.get_reference_frame_gravity();

get_reference_frame_gravity() čte, zda gravitace následuje lokální směr nahoru referenčního rámce. Nevrací vektor zrychlení. Pro velikost použijte get_gravity(), pro aktuální orientaci get_up().

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
JoltCharacter.clear_reference_frameJoltCharacter.clear_reference_frame()Boolean; zruší rámec a obnoví +Z up, vyčistí transportní/externí impulsní stav, hosta nezničí.
JoltCharacter.get_reference_frameJoltCharacter.get_reference_frame()Živý uložený JoltBody nebo undefined; není vlastněný Characterem.
JoltCharacter.get_reference_frame_angular_velocityJoltCharacter.get_reference_frame_angular_velocity()Úhlová rychlost rámce: světové {x, y, z}, rad/s; undefined při chybě. Údaj podpory čti společně s ground_state.
JoltCharacter.get_reference_frame_gravityJoltCharacter.get_reference_frame_gravity()Boolean nastavení gravitace vůči rámci. Setter Boolean úspěchu, getter Boolean stavu, false i při chybě.
JoltCharacter.get_reference_frame_velocityJoltCharacter.get_reference_frame_velocity()Rychlost referenčního rámce: světové {x, y, z}, m/s; undefined při chybě. Údaj podpory čti společně s ground_state.
JoltCharacter.get_upJoltCharacter.get_up()Směr nahoru: světové {x, y, z}, jednotkový vektor / unit vector; undefined při chybě. Údaj podpory čti společně s ground_state.
JoltCharacter.get_world_move_velocityJoltCharacter.get_world_move_velocity()Požadovaný světový pohyb: světové {x, y, z}, m/s; undefined při chybě. Údaj podpory čti společně s ground_state.
JoltCharacter.set_reference_frameJoltCharacter.set_reference_frame(body, local_gravity = false)Živý JoltBody ve stejném světě, local_gravity=false výchozí. Boolean; odmítne při attachmentu. Přenáší pohyb referenčního tělesa, není to attachment k pevné místní pozici.
JoltCharacter.set_reference_frame_gravityJoltCharacter.set_reference_frame_gravity(enabled)Boolean nastavení gravitace vůči rámci. Setter Boolean úspěchu, getter Boolean stavu, false i při chybě.