Character

Skákání

Zařadí deterministický skok s volitelným coyote time a jump bufferem.

jump() nezmění pozici okamžitě. Zařadí požadavek, který high-level fixed-step pre-pass odešle před nativní aktualizací postavy.

Základní skok#

GML
if (keyboard_check_pressed(vk_space)) {
    player.jump();
}

jolt_update();

if (player.just_jumped()) {
    audio_play_sound(snd_jump, 0, false);
}

Rychlost skoku#

GML
player.set_jump_speed(7);
var jump_speed = player.get_jump_speed();

Úspěšný skok přidá jump_speed ve směru aktuálního up vektoru. Hodnota musí být konečná a nezáporná.

Coyote time a jump buffer#

GML
player.set_coyote_time(0.10);
player.set_jump_buffer(0.12);

var coyote_left = player.get_coyote_remaining();
var buffer_left = player.get_jump_buffer_remaining();
  • Coyote time dovolí skok krátce po opuštění podporovaného povrchu.
  • Jump buffer uchová požadavek zadaný krátce před dopadem.
  • Oba časy se měří a spotřebovávají v pevných krocích fyziky.
  • Nula příslušnou toleranci vypne.

Související přechody#

GML
player.just_landed()
player.just_left_ground()
player.is_grounded()
player.is_in_air()

Tyto příznaky umožňují řídit animace a zvuky bez ohledu na počet fixed steps v aktuálním render frame.

Konfigurace versus zbývající čas#

APIChování
get_coyote_time() / get_jump_buffer()Nastavená délka tolerance/bufferu v sekundách.
get_coyote_remaining() / get_jump_buffer_remaining()Aktuální zbývající čas, nikoliv nastavené maximum.
GML
show_debug_message(player.get_coyote_time());
show_debug_message(player.get_coyote_remaining());

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.get_coyote_remainingJoltCharacter.get_coyote_remaining()Uložený limit nebo zbývající čas v sekundách podle názvu; getter neověřuje živost. Timery zpracovává fixed step, při Grip/attachment se čekající skok ruší.
JoltCharacter.get_coyote_timeJoltCharacter.get_coyote_time()Uložený limit nebo zbývající čas v sekundách podle názvu; getter neověřuje živost. Timery zpracovává fixed step, při Grip/attachment se čekající skok ruší.
JoltCharacter.get_jump_bufferJoltCharacter.get_jump_buffer()Uložený limit nebo zbývající čas v sekundách podle názvu; getter neověřuje živost. Timery zpracovává fixed step, při Grip/attachment se čekající skok ruší.
JoltCharacter.get_jump_buffer_remainingJoltCharacter.get_jump_buffer_remaining()Uložený limit nebo zbývající čas v sekundách podle názvu; getter neověřuje živost. Timery zpracovává fixed step, při Grip/attachment se čekající skok ruší.
JoltCharacter.get_jump_speedJoltCharacter.get_jump_speed()Rychlost skoku: aktuální číslo v m/s. Selhání: undefined; neplatný objekt není nulové měření.
JoltCharacter.jumpJoltCharacter.jump()Boolean přijetí požadavku, ne potvrzení provedeného skoku. Zpracuje se před fyzikálním krokem; buffer má nejméně jeden fixed timestep. Grip/attachment skok odmítají. Pro provedení sleduj just_jumped.
JoltCharacter.just_jumpedJoltCharacter.just_jumped()Boolean události managed snímku; čti po jolt_update. Následující začátek managed snímku příznak vyčistí. Není to trvalý stav (např. just_landed není is_grounded).
JoltCharacter.set_coyote_timeJoltCharacter.set_coyote_time(seconds)Sekundy ≥0, výchozí 0; Boolean. Krátí již běžící timer na nové maximum. Wrapper kontroluje jen zápornost, proto sám posílej konečné číslo; nelze spoléhat na odmítnutí NaN/Infinity.
JoltCharacter.set_jump_bufferJoltCharacter.set_jump_buffer(seconds)Sekundy ≥0, výchozí 0; Boolean. Krátí již běžící timer na nové maximum. Wrapper kontroluje jen zápornost, proto sám posílej konečné číslo; nelze spoléhat na odmítnutí NaN/Infinity.
JoltCharacter.set_jump_speedJoltCharacter.set_jump_speed(value)Rychlost skoku: konečné číslo ≥0 m/s; výchozí 7. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.