Pohyb postavy
Řídí normalizovaný pohyb v rovině, přímou rychlost a synchronizaci s GameMakerem.
set_move(x, y) ukládá trvalý vstup pro pohyb. V každém pevném kroku fyziky nativní controller omezí jeho délku na 1, vynásobí jej speed, případně otočí referenčním rámcem a zruší pohyb proti příliš strmým svahům.
Pohyb v rovině#
// Step event: vstup může být od -1 do 1.
var move_x = keyboard_check(ord("D")) - keyboard_check(ord("A"));
var move_y = keyboard_check(ord("W")) - keyboard_check(ord("S"));
player.set_move(move_x, move_y);
jolt_update();
player.sync();Rychlost pohybu#
player.set_speed(6.5);
var speed = player.get_speed();Speed musí být konečné nezáporné číslo a udává požadovanou rychlost v jednotkách worldu za sekundu.
Přímá velocity#
player.set_velocity(push_x, push_y, push_z);
var velocity = player.get_velocity();Přímá velocity používá veřejné world-space souřadnice. Další krok znovu sestaví horizontální pohyb ze set_move(), ale zachová vertikální pohyb vzhledem k aktuálnímu up vektoru.
Hodnoty pohybu#
| Metoda | Význam |
|---|---|
| get_world_move_velocity() | Požadovaný pohyb po rotaci rámcem, normalizaci, aplikaci speed a omezení strmým svahem. |
| get_velocity() | Aktuální nativní lineární velocity včetně vertikálního pohybu a impulzů. |
| get_reference_frame_velocity() | Lineární velocity referenčního tělesa. |
| get_reference_frame_angular_velocity() | Úhlová velocity referenčního tělesa. |
Teleportace#
player.set_position(target_x, target_y, target_z);
var feet = player.get_position();set_position() okamžitě přesune základnu controlleru a neprovádí swept test. Používejte jej pro spawn nebo záměrnou teleportaci, ne běžný pohyb.
Hmotnost, gravitace a tlačení za běhu#
| API | Chování |
|---|---|
| player.set_mass(value) / get_mass() | Konečná hmotnost > 0; ovlivňuje interakci CharacterVirtual s rigidními tělesy, nepřevádí jej na JoltBody. |
| player.set_gravity(value) / get_gravity() | Konečná nezáporná velikost gravitace v jednotkách/s². Výchozí směr je světové -Z; gravitace referenčního rámce používá -up. |
| player.set_max_strength(value) / get_max_strength() | Konečná nezáporná maximální síla pro tlačení rigidních těles. |
| player.set_max_strength(value) / get_max_push_force() | Aliasy set_max_strength/get_max_strength; nejde o tlačení mezi dvěma Charactery. |
// player is a validated JoltCharacter; submit changes before jolt_update().
if (!player.set_mass(80)) show_debug_message(jolt_get_error_message());
if (!player.set_gravity(9.81)) show_debug_message(jolt_get_error_message());
if (!player.set_max_strength(500)) show_debug_message(jolt_get_error_message());Ground Friction a Air Movement#
Původní pohyb platí při vypnutých opt-in režimech. Ground Friction a Air Movement upravují trakci a vlastní horizontální rychlost. Externí impulz exploze má oddělený stav; není automaticky smazán dalším set_move. Veřejný Character nemá add_impulse — použij podporovaný systém, například jolt_explosion s include_characters.
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ík | Signatura | Kontrakt operace |
|---|---|---|
| JoltCharacter.get_gravity | JoltCharacter.get_gravity() | Velikost gravitace: aktuální číslo v m/s². Selhání: undefined; neplatný objekt není nulové měření. |
| JoltCharacter.get_mass | JoltCharacter.get_mass() | Hmotnost: aktuální číslo v kg. Selhání: undefined; neplatný objekt není nulové měření. |
| JoltCharacter.get_max_strength | JoltCharacter.get_max_strength() | Maximální tlačná síla: aktuální číslo v N. Selhání: undefined; neplatný objekt není nulové měření. |
| JoltCharacter.get_speed | JoltCharacter.get_speed() | Rychlost chůze: aktuální číslo v m/s. Selhání: undefined; neplatný objekt není nulové měření. |
| JoltCharacter.get_velocity | JoltCharacter.get_velocity() | Aktuální světová rychlost {x, y, z} v m/s, undefined při chybě. |
| JoltCharacter.set_gravity | JoltCharacter.set_gravity(value) | Velikost gravitace: konečné číslo ≥0 m/s²; výchozí 9.81. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. |
| JoltCharacter.set_mass | JoltCharacter.set_mass(value) | Hmotnost: konečné číslo >0 kg; výchozí 80. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. |
| JoltCharacter.set_max_strength | JoltCharacter.set_max_strength(value) | Maximální tlačná síla: konečné číslo ≥0 N; výchozí 100. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. |
| JoltCharacter.set_move | JoltCharacter.set_move(x, y) | Konečné dvě vstupní osy x/y, běžně -1..1; Boolean. Jde o požadavek pohybu pro další kroky, nikoliv teleport či impulz. Referenční rámec může směr otočit. |
| JoltCharacter.set_speed | JoltCharacter.set_speed(value) | Rychlost chůze: konečné číslo ≥0 m/s; výchozí 5. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. |
| JoltCharacter.set_velocity | JoltCharacter.set_velocity(x, y, z) | Konečné světové x/y/z v m/s; Boolean. Přímé přepsání rychlosti vyčistí uložené air/ground momentum a externí impuls, při attachmentu se odmítne. |