Physics World

jolt_stop

Zničí managed physics resources, default world a native runtime.

jolt_stop() provede úplný high-level teardown. Zneplatní managed handly, uvolní native i GameMaker-side resources, vyčistí event data a timing state, zničí default world a ukončí Jolt.

Syntax#

Syntax
jolt_stop();

Návratová hodnota#

Boolean. true po úspěšném uvolnění, také pokud svět neběží. false při chybě uvolnění; jolt_get_error() zachovává první chybu.

Typický cleanup#

GML
// Cleanup event persistentního physics controlleru.
if (!jolt_stop()) {
    var error = jolt_get_error();
    show_debug_message(error.context + ": " + error.message);
}

Pořadí cleanupu#

  • Cloths se zničí a jejich vertex/debug buffers se odstraní.
  • Characters se zničí, zneplatní, odpojí od owners a přijdou o contact arrays.
  • Constraints a path resources se zničí a zneplatní.
  • Bodies se zničí a uvolní se jejich geometry metadata, compound children a collision arrays.
  • Managed shape resources a compounds se uvolní.
  • Každý JoltLayer se zneplatní a event arrays i dropped counters se vyčistí.
  • Default world se zničí, native runtime se ukončí a debug resources se resetují.
  • started se nastaví na false, world na 0 a accumulator i simulation-step counter se vynulují.

Chyby během teardownu#

Funkce si zapamatuje první cleanup error, ale pokračuje v pokusu o zbývající teardown. Po zpracování všech resources a state vrátí false a první chybu zpřístupní přes jolt_get_error(). Úspěšný teardown vrací true.

Stale managed hodnoty#

User variables mohou i po stop stále odkazovat na staré JoltBody, JoltLayer, JoltConstraint, JoltShape nebo jiné wrapper structy. Jejich valid flags jsou vypnuté a native handly se tam, kde je to relevantní, nastaví na 0. Považujte je za stale a po restartu je nepoužívejte.

Restart#

GML
jolt_stop();

// Vytvoří zcela nový default world.
jolt_start({gravity_z: -3.71});

// Znovu vytvořte layers, bodies, shapes a constraints nového worldu.

Nový start vytvoří nový world a čerstvé registry. Collision layers a všechny resources svázané s předchozím worldem je nutné vytvořit znovu.

Kdy fyziku zastavit#

  • jolt_stop() zavolejte při opuštění části hry, která physics world vlastní.
  • U persistentního global controlleru použijte jeho Cleanup event nebo jiné jediné autoritativní shutdown místo.
  • Fyziku nezastavujte, dokud jiné gameplay objekty očekávají platné body bindings.
  • Kvůli odstranění jediného body není nutné zastavit celý world; pro jednotlivé resources použijte destroy operation daného JoltBody.

Low-Level / Advanced API#

GML
jolt_world_destroy(world)
jolt_shutdown()

jolt_world_destroy() odstraní jeden explicitní native world. jolt_shutdown() je idempotentní i na native úrovni a odstraní všechny zbývající worlds, job system, temporary allocator, registrované Jolt types, cached raycast/contact bridge state a Jolt factory.

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_stopjolt_stop()Boolean idempotentního ukončení; uvolní managed zdroje, svět a native runtime. Stará tělesa/vrstvy/helpers se po novém startu nesmějí znovu použít.