Kolizní systém

Kolizní vrstvy

Seskupují bodies a určují, které skupiny spolu mohou kolidovat.

Vrstvy jsou world-scoped hodnoty JoltLayer napojené na symetrickou kolizní matici 32×32. Každý managed world začíná vrstvou Default a každá nová dvojice je povolená, dokud ji explicitně nevypnete.

High-Level API#

GML
jolt_default_layer()
jolt_layer_create(name)
jolt_layer_set_collision(layer_a, layer_b, enabled)

body.set_layer(layer)
body.get_layer()

JoltLayer#

Field / metodaVýznam
nameGML display name vrstvy
worldHandle vlastnícího native worldu
handleNeprůhledný 1-based native handle vrstvy
is_valid()True pouze během existence vlastnícího managed worldu
get_native_handle()Handle, nebo 0 při neplatné vrstvě

Pravidla vytvoření#

  • Před vytvořením vrstvy zavolejte jolt_start().
  • World podporuje nejvýše 32 user layers včetně Default.
  • Jména musí být neprázdná, unikátní v rámci worldu a v native reprezentaci mohou mít nejvýše 63 bytů.
  • jolt_layer_create() vrací JoltLayer nebo undefined.
  • jolt_stop() vrstvy zneplatní; v novém worldu je nelze znovu použít.

Přiřazení vrstvy#

GML
var player_layer = jolt_layer_create("Player");
var world_layer = jolt_layer_create("World");

var player = jolt_capsule_create_dynamic(0, 0, 2, 1.8, 0.4, {layer: player_layer});
player.set_layer(world_layer);
var current = player.get_layer();

Body přijímá vrstvu při vytvoření přes options.layer nebo později přes set_layer(). JoltLayer musí být platná a patřit stejnému worldu. Změna vrstvy non-Static body jej aktivuje, aby se obnovil broad-phase stav.

Kolizní matice#

GML
jolt_layer_set_collision(player_layer, world_layer, true);
jolt_layer_set_collision(player_layer, player_layer, false);

Matice je symetrická: změna A↔B zároveň mění B↔A. Povolit nebo zakázat lze i dvojici vrstvy se sebou samou. Nové vrstvy zpočátku kolidují se všemi aktivními vrstvami.

Low-Level / Advanced API#

Low-level volání používají číselné handly a vracejí číselné 1/0 nebo handle. JoltLayer je bezpečnější managed reprezentace.

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_default_layerjolt_default_layer()První managed vrstva Default nebo undefined před startem; není číslo JOLT_DEFAULT_LAYER.
jolt_layer_createjolt_layer_create(name)Běžící svět, jméno převedeno na string; vrací JoltLayer/undefined. Vrstva patří konkrétnímu světu.
JoltBody.get_layerJoltBody.get_layer()Setter živý JoltLayer stejného světa → Boolean. Getter managed vrstva nebo undefined, nikoliv číselný handle.
JoltBody.set_layerJoltBody.set_layer(layer)Setter živý JoltLayer stejného světa → Boolean. Getter managed vrstva nebo undefined, nikoliv číselný handle.
JoltLayer.get_native_handleJoltLayer.get_native_handle()is_valid Boolean wrapperu a aktivního světa; get_native_handle handle nebo0. Není samostatná destroy metoda vrstvy.
JoltLayer.is_validJoltLayer.is_valid()is_valid Boolean wrapperu a aktivního světa; get_native_handle handle nebo0. Není samostatná destroy metoda vrstvy.