Tělesa

HeightField

Vytvoří pravidelnou výškovou mřížku pro Static terrain.

Každý sample určuje veřejnou Z výšku v pravidelné XY mřížce. Wrapper převádí interní orientaci Joltu na Z-up a obrací rows tak, aby veřejné Y rostlo stejně jako vstup.

Syntaxe#

Syntax
jolt_heightfield_create_static(heights, width, height, cell_size,
                 x=0, y=0, z=0, options=undefined)

Formát heights#

GML
// Ploché row-major pole
heights[row * width + column]

// Nested array
heights[row][column]

Ploché pole má width*height hodnot; nested pole přesně height řádků po width hodnotách. Každý sample je konečné lokální Z a může být kladný i záporný.

Rozlišení, rozměry a orientace#

  • width a height jsou počty samples, ne world rozměry.
  • Mřížka musí být čtvercová: width == height.
  • Rozlišení je 4..512 samples na každé straně.
  • cell_size je kladná vzdálenost podél X; options.cell_size_y určuje Y a standardně se rovná cell_size.
  • World rozsah je (width-1)*cell_size v X a (height-1)*cell_size_y v Y.
  • x,y,z je origin prvního sample: [0][0] leží v (x, y, z+heights[0][0]), nejde o střed terrainu.

cell_size_y je jediná shape-specific položka ve společném options structu; po použití při stavbě HeightField ji __jolt_high_apply_options() ignoruje.

Validace a návrat#

Creator odmítne nečtvercovou nebo mimo-limitní mřížku, chybný počet samples, rozdílné rows, NaN/Infinity a nekladné cell sizes. Vrací Static JoltBody nebo undefined. Relevantní options jsou rotation, rotation_euler, friction, restitution, layer a sensor; motion-only options selžou. Podporuje kontakty, filtering, sensor a raycast. Debug používá stride do přibližně 128 samples na osu.

Reusable JoltShape#

GML
var shape = jolt_shape_heightfield(heights, width, height, cell_size,
                       cache_key=undefined, cell_size_y=undefined);
var terrain = shape.create_static(x, y, z, options);

Resource creator má odlišné pořadí posledních optional argumentů. create_dynamic() a create_kinematic() nejsou povoleny. jolt_shape_load() podporuje HeightField .jcol.

Low-Level / Advanced API#

Ergonomický array creator neexistuje. jolt_world_geometry_create(world,payload) očekává interní base64 payload a vždy Static motion; používejte jolt_heightfield_create_static() nebo jolt_shape_heightfield().

Příklad#

GML
var size = 8;
var heights = array_create(size * size, 0);
for (var yy = 0; yy < size; ++yy) {
    for (var xx = 0; xx < size; ++xx) {
        var dx = xx - 3.5;
        var dy = yy - 3.5;
        heights[yy * size + xx] = 0.08 * (dx*dx + dy*dy);
    }
}
var terrain = jolt_heightfield_create_static(heights, size, size, 1,
    -3.5, -3.5, 0, {friction:0.9, cell_size_y:1});

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_heightfield_create_staticjolt_heightfield_create_static(source_heights = array_create(16,0), width = 4, height = 4, cell_size = 1, x = 0, y = 0, z = 0, options = undefined)Statický výškový grid, default 4×4 nulové výšky/cell1m. Čtverec4..512, kladné cell sizes, ploché pole nebo řádky; JoltBody/undefined.