‹›
Character

Kontakty postavy

Zpracovává kontaktní eventy s rigidními tělesy i mezi postavami.

Nativní bridge zaznamenává Added, Persisted a Removed. jolt_update() je po dokončení všech fixed steps převede do nových globálních a per-character polí.

Typy eventů#

Kontakty s tělesy#

GML
var contacts = player.get_contacts();
for (var i = 0; i < array_length(contacts); ++i) {
    var hit = contacts[i];
    show_debug_message(hit.entity);
}
FieldVýznam
typeAdded, persisted nebo removed.
characterTento JoltCharacter.
body / body_handle / body_validSpravované těleso a bezpečná nativní identita.
entityHodnota user_data tělesa.
sensorZda jde o sensor.
position / normal / velocityWorld-space data kontaktu.

Kontakty mezi postavami#

GML
player.set_character_collision_mode(JOLT_CHARACTER_PUSH);
player.set_character_push_strength(50);

var pairs = player.get_character_contacts();
RežimChování
JOLT_CHARACTER_IGNOREBez kolize mezi postavami; výchozí režim.
JOLT_CHARACTER_BLOCKPostavy se blokují bez vzájemného tlačení.
JOLT_CHARACTER_PUSHBlokování a omezená zařazená push velocity.

Pravidlo dvojice vrstev#

GML
jolt_character_layers_set_mode(player_layer, enemy_layer, JOLT_CHARACTER_BLOCK);

Režimy postav a symetrické pravidlo dvojice vrstev se vyhodnotí společně. Obě vrstvy musí patřit do stejného aktivního worldu. Aktuální implementace prochází seznam postav sériově metodou brute force.

Přechodové pair eventy#

GML
player.character_contact_entered()
player.character_contact_exited()
player.clear_contacts()
player.clear_character_contacts()
player.get_dropped_contact_count()

Spravovaná pole nahradí další jolt_update(). Data, která potřebujete uchovat, si zkopírujte.

Vrstvy, čtení nastavení a diagnostika světa#

APIChování
set_character_layer(layer) / get_character_layer()Používá živý JoltLayer stejného světa; sdílí aktuální hodnotu vrstvy wrapperu se set_layer/get_layer.
get_character_collision_mode()Čte IGNORE, BLOCK nebo PUSH; neodvozujte režim z maximální tlačné síly.
set_character_push_strength(value) / get_character_push_strength()Konečné nezáporné nastavení tlačení mezi Charactery; odlišné od max_strength vůči rigidním tělesům.
jolt_get_character_contacts()Poslední managed pole událostí dvojic Characterů pro celý svět po jolt_update().
jolt_get_dropped_character_contact_count()Počet zahozených událostí dvojic Characterů zpřístupněný managed drainem; kontrolujte pro odhalení přetečení.
GML
// Read after the central physics update.
var pairs = jolt_get_character_contacts();
var dropped = jolt_get_dropped_character_contact_count();
if (dropped > 0) show_debug_message("Character contact overflow: " + string(dropped));

Globální pole dvojic není pole rigidních kontaktů konkrétní postavy z player.get_contacts(). Pole událostí berte jako snapshot aktualizace a zpracujte je před nahrazením další aktualizací.

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_get_dropped_character_contact_countjolt_get_dropped_character_contact_count()Číselný součet dropped Character–Character událostí při posledním managed drain; počáteční 0.
jolt_get_character_contactsjolt_get_character_contacts()Globální managed pole Character–Body událostí z drain fáze jolt_update, nikoliv pole Character–Character. Formát odpovídá Character.get_contacts.
jolt_character_layers_set_modejolt_character_layers_set_mode(layer_a, layer_b, mode)Dva živé JoltLayer stejného světa, režim IGNORE/BLOCK/PUSH. Boolean; nastavuje pravidlo Character párů, nikoliv běžnou rigid collision matrix.
JoltCharacter.clear_contactsJoltCharacter.clear_contacts()Boolean; vyprázdní příslušné GML pole i native frontu. Neodstraní fyzické kolize ani nezmění filtr.
JoltCharacter.clear_character_contactsJoltCharacter.clear_character_contacts()Boolean; vyprázdní příslušné GML pole i native frontu. Neodstraní fyzické kolize ani nezmění filtr.
JoltCharacter.get_contactsJoltCharacter.get_contacts()Pole kontaktových událostí: type, character, body, body_handle, body_valid, entity, sensor, position {x, y, z} m, normal, velocity {x, y, z} m/s. Čti po jolt_update; senzory mají samostatná enter/exit pole. Nejde o trvalý seznam překryvů.
JoltCharacter.get_dropped_contact_countJoltCharacter.get_dropped_contact_count()Číselný počet zahozených nativních kontaktových událostí, undefined při chybě. Nejde o počet všech kontaktů.
JoltCharacter.get_character_collision_modeJoltCharacter.get_character_collision_mode()Režim JOLT_CHARACTER_IGNORE/BLOCK/PUSH mezi postavami. Setter Boolean, getter enum nebo undefined při chybě. Pár může přepsat explicitní pravidlo vrstev.
JoltCharacter.get_character_contactsJoltCharacter.get_character_contacts()Pole událostí Character–Character: type, character, other_character, other_handle, other_valid, other_entity, position, normal, relative_velocity. Světové m/m/s; čti po jolt_update.
JoltCharacter.get_character_layerJoltCharacter.get_character_layer()Uložený JoltLayer, nikoliv číselný handle. Getter sám neověřuje platnost.
JoltCharacter.get_character_push_strengthJoltCharacter.get_character_push_strength()Síla vůči jinému Characteru: aktuální číslo v N. Selhání: undefined; neplatný objekt není nulové měření.
JoltCharacter.get_layerJoltCharacter.get_layer()Uložený JoltLayer, nikoliv číselný handle. Getter sám neověřuje platnost.
JoltCharacter.character_contact_enteredJoltCharacter.character_contact_entered()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.character_contact_exitedJoltCharacter.character_contact_exited()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_character_collision_modeJoltCharacter.set_character_collision_mode(mode)Režim JOLT_CHARACTER_IGNORE/BLOCK/PUSH mezi postavami. Setter Boolean, getter enum nebo undefined při chybě. Pár může přepsat explicitní pravidlo vrstev.
JoltCharacter.set_character_layerJoltCharacter.set_character_layer(layer)Živý JoltLayer ze stejného světa; Boolean. Oba zápisy aktualizují uloženou vrstvu Characteru; nezapisují pravidla kolizní matice.
JoltCharacter.set_character_push_strengthJoltCharacter.set_character_push_strength(value)Síla vůči jinému Characteru: konečné číslo ≥0 N; výchozí 50. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltCharacter.set_layerJoltCharacter.set_layer(layer)Živý JoltLayer ze stejného světa; Boolean. Oba zápisy aktualizují uloženou vrstvu Characteru; nezapisují pravidla kolizní matice.