‹›
Character

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#

Syntax
jolt_character(x, y, z, options=undefined)

Minimální nastavení#

GML
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#

FieldVýchozíVýznam
radius0.4Poloměr kapsle; musí být větší než 0.
height1.8Celková výška ve stoje; musí být větší než 2 × radius.
crouch_heightmax(2 × radius + 0.05, height × 0.62)Celková výška při přikrčení.
mass80Kladná hmotnost postavy.
max_strength100Maximální síla pro interakci s tělesy.
speed5Rychlost pohybu v rovině.
jump_speed7Rychlost přidaná ve směru aktuálního up vektoru.
gravity9.81Kladná velikost gravitace.
max_slope45Největší schůdný úhel ve stupních.
step_height0.35Maximální výška automatického kroku.
layerDefaultAktivní kolizní vrstva výchozího worldu.
coyote_time0Čas v sekundách pro opožděný skok.
jump_buffer0Čas v sekundách uchování předčasného požadavku na skok.

Životní cyklus a identita#

GML
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#

GML
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í#

GML
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íkSignaturaKontrakt operace
jolt_characterjolt_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_instanceJoltCharacter.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.destroyJoltCharacter.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_facesJoltCharacter.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_handleJoltCharacter.get_native_handle()Živý Character handle, jinak 0; není rigid Body handle.
JoltCharacter.get_positionJoltCharacter.get_position()Světová pozice chodidel {x, y, z} v m; undefined při chybě.
JoltCharacter.get_radiusJoltCharacter.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_dataJoltCharacter.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_transformJoltCharacter.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_validJoltCharacter.is_valid()Boolean, ověří wrapper, původní svět i nativní handle.
JoltCharacter.just_stoodJoltCharacter.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_facesJoltCharacter.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_positionJoltCharacter.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_radiusJoltCharacter.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_dataJoltCharacter.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.syncJoltCharacter.sync()Boolean; zkopíruje současnou pozici do navázané živé GameMaker instance. Bez živé vazby nebo Characteru false.
JoltCharacter.unbind_instanceJoltCharacter.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.