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#
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 / metoda | Význam |
|---|---|
| name | GML display name vrstvy |
| world | Handle vlastnícího native worldu |
| handle | Neprů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#
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#
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ík | Signatura | Kontrakt operace |
|---|---|---|
| jolt_default_layer | jolt_default_layer() | První managed vrstva Default nebo undefined před startem; není číslo JOLT_DEFAULT_LAYER. |
| jolt_layer_create | jolt_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_layer | JoltBody.get_layer() | Setter živý JoltLayer stejného světa → Boolean. Getter managed vrstva nebo undefined, nikoliv číselný handle. |
| JoltBody.set_layer | JoltBody.set_layer(layer) | Setter živý JoltLayer stejného světa → Boolean. Getter managed vrstva nebo undefined, nikoliv číselný handle. |
| JoltLayer.get_native_handle | JoltLayer.get_native_handle() | is_valid Boolean wrapperu a aktivního světa; get_native_handle handle nebo0. Není samostatná destroy metoda vrstvy. |
| JoltLayer.is_valid | JoltLayer.is_valid() | is_valid Boolean wrapperu a aktivního světa; get_native_handle handle nebo0. Není samostatná destroy metoda vrstvy. |