Vytvoření postavy
Vytvoří a spravuje kapslový CharacterVirtual controller ve výchozím physics worldu.
jolt_character() vytvoří spravovaný JoltCharacter. Jeho veřejná pozice leží na základně kapsle u chodidel, celková výška zahrnuje obě zaoblené části a směr nahoru je +Z, dokud jej nezmění referenční rámec.
Syntaxe#
jolt_character(x, y, z, options=undefined)Minimální nastavení#
jolt_start();
var player = jolt_character(0, 0, 1, {
radius: 0.4,
height: 1.8,
layer: jolt_default_layer()
});
if (is_undefined(player)) {
show_error(jolt_get_error().message, true);
}Options#
| Field | Výchozí | Význam |
|---|---|---|
| radius | 0.4 | Poloměr kapsle; musí být větší než 0. |
| height | 1.8 | Celková výška ve stoje; musí být větší než 2 × radius. |
| crouch_height | max(2 × radius + 0.05, height × 0.62) | Celková výška při přikrčení. |
| mass | 80 | Kladná hmotnost postavy. |
| max_strength | 100 | Maximální síla pro interakci s tělesy. |
| speed | 5 | Rychlost pohybu v rovině. |
| jump_speed | 7 | Rychlost přidaná ve směru aktuálního up vektoru. |
| gravity | 9.81 | Kladná velikost gravitace. |
| max_slope | 45 | Největší schůdný úhel ve stupních. |
| step_height | 0.35 | Maximální výška automatického kroku. |
| layer | Default | Aktivní kolizní vrstva výchozího worldu. |
| coyote_time | 0 | Čas v sekundách pro opožděný skok. |
| jump_buffer | 0 | Čas v sekundách uchování předčasného požadavku na skok. |
Životní cyklus a identita#
player.is_valid()
player.get_native_handle()
jolt_managed_character_count()
player.destroy()destroy() odebere nativní controller, zneplatní spravovaný wrapper a vyčistí binding i pole kontaktů.
Napojení GameMaker instance#
player.bind_instance(id);
// Po jolt_update():
player.sync();sync() zapíše do napojené instance x, y, z, jolt_ground_state a jolt_is_crouched. unbind_instance() spojení odstraní bez zničení postavy.
Nastavení po vytvoření#
player = jolt_character();
if (!is_undefined(player)) {
player.set_position(0, 0, 2);
player.set_radius(0.4);
player.set_height(2.0);
}Výška je celá kapsle, pozice označuje chodidla. Změna rozměrů je okamžitá a při neplatných hodnotách nebo zablokování vrací false. crouch_height zachovává poměr.
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 |
|---|---|---|
| jolt_character | jolt_character(x = 0, y = 0, z = 0, options = undefined) | JoltCharacter nebo undefined; vyžaduje běžící managed svět. Pozice chodidel (m) default 0. Options: radius=.4, height=1.8 (celková), crouch_height=max(2*radius+.05, height*.62), mass=80 kg, max_strength=100 N, speed=5 m/s, jump_speed=7 m/s, gravity=9.81 m/s², max_slope=45°, step_height=.35 m, default layer, coyote_time=jump_buffer=0 s. max_push_force je pouze fallback option pro max_strength. Neznámé options samy nevytvářejí settery; air/ground friction nastav přes metody. |
| JoltCharacter.bind_instance | JoltCharacter.bind_instance(instance) | bind_instance vyžaduje existující GameMaker instanci a vrací Boolean; unbind_instance vrací true. Nevlastní instanci ani automaticky nemění user_data. |
| JoltCharacter.destroy | JoltCharacter.destroy() | Boolean; odstraní Character a jeho Grip, ne hosta attachmentu ani GameMaker instanci. Opakování po úspěchu vrací true. |
| JoltCharacter.get_collide_with_back_faces | JoltCharacter.get_collide_with_back_faces() | Výchozí true: obě strany mesh trojúhelníků; false pouze přední. Setter Boolean úspěchu, getter Boolean stavu (false i při chybě). |
| JoltCharacter.get_native_handle | JoltCharacter.get_native_handle() | Živý Character handle, jinak 0; není rigid Body handle. |
| JoltCharacter.get_position | JoltCharacter.get_position() | Světová pozice chodidel {x, y, z} v m; undefined při chybě. |
| JoltCharacter.get_radius | JoltCharacter.get_radius() | Uložený aktuální rozměr v m; výška je celková, nikoliv výška válce. Getter sám neověřuje platnost. |
| JoltCharacter.get_user_data | JoltCharacter.get_user_data() | Libovolná GML hodnota uložená v wrapperu; setter true, getter vrací hodnotu. Není to nativní fyzikální parametr, životnost uloženého objektu se nepřebírá. |
| JoltCharacter.get_view_transform | JoltCharacter.get_view_transform(yaw, pitch) | Konečné yaw/pitch ve stupních; vrací {position, target, up}, undefined při chybě. Oko je chodidla + up*aktuální výška. Při attachmentu jsou úhly relativní k hostu, jinak světové. |
| JoltCharacter.is_valid | JoltCharacter.is_valid() | Boolean, ověří wrapper, původní svět i nativní handle. |
| JoltCharacter.just_stood | JoltCharacter.just_stood() | 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_collide_with_back_faces | JoltCharacter.set_collide_with_back_faces(enabled) | Výchozí true: obě strany mesh trojúhelníků; false pouze přední. Setter Boolean úspěchu, getter Boolean stavu (false i při chybě). |
| JoltCharacter.set_position | JoltCharacter.set_position(x, y, z) | Konečná světová pozice chodidel x/y/z v m; Boolean. Teleport vyčistí transportní a externí impulsní stav. Při attachmentu odmítne. |
| JoltCharacter.set_radius | JoltCharacter.set_radius(metres) | Konečné rozměry kapsle v m, radius>0, total height>2*radius+minimální válcová část. Boolean; změna je okamžitá, při překážce/attachmentu selže bez změny rozměrů. Výška dřepu sleduje původní poměr, s minimem daným poloměrem. |
| JoltCharacter.set_user_data | JoltCharacter.set_user_data(value) | Libovolná GML hodnota uložená v wrapperu; setter true, getter vrací hodnotu. Není to nativní fyzikální parametr, životnost uloženého objektu se nepřebírá. |
| JoltCharacter.sync | JoltCharacter.sync() | Boolean; zkopíruje současnou pozici do navázané živé GameMaker instance. Bez živé vazby nebo Characteru false. |
| JoltCharacter.unbind_instance | JoltCharacter.unbind_instance() | bind_instance vyžaduje existující GameMaker instanci a vrací Boolean; unbind_instance vrací true. Nevlastní instanci ani automaticky nemění user_data. |