Vlastnosti tělesa

Rotace

Čte a mění orientaci body pomocí quaternionu nebo Euler helperů.

Kanonická native reprezentace je normalizovaný quaternion {x,y,z,w}. High-level helpery přijímají také Euler úhly ve stupních kolem veřejných os X, poté Y a Z.

High-Level API#

GML
body.get_rotation()
body.get_rotation_euler()
body.set_rotation(x, y, z)
body.set_rotation(x, y, z, w)
body.set_rotation_euler(x_degrees, y_degrees, z_degrees)

Pravidla overloadu#

VoláníVýznamNávrat
set_rotation(x,y,z)Euler stupněBoolean
set_rotation(x,y,z,w)QuaternionBoolean
get_rotation()Normalizovaný quaternion {x,y,z,w}Struct nebo undefined
get_rotation_euler()Převedené Euler stupně {x,y,z}Struct nebo undefined

Skládání Euler rotací#

jolt_quaternion_from_euler() skládá q = qZ * qY * qX, takže rotace se aplikují kolem veřejné X, poté Y a nakonec Z. Euler reprezentace není jednoznačná a poblíž gimbal lock může být nestabilní; pro přesný round-trip uchovávejte quaternion.

Creation options#

GML
var body = jolt_box_create_dynamic(0, 0, 3, 2, 1, 1, {
    rotation: {x:0, y:0, z:0, w:1}
});

var tilted = jolt_box_create_dynamic(3, 0, 3, 2, 1, 1, {
    rotation_euler: {x:15, y:30, z:90}
});

Jsou-li přítomny rotation i rotation_euler, nejprve se použije quaternion a rotation_euler jej následně nahradí. Pro jednoznačnost zadávejte pouze jednu variantu.

Chování motion typu#

  • Změna rotace je okamžitá transformace, nikoli angular motion.
  • Dynamic a Kinematic bodies se aktivují; Static se aktualizují bez aktivace.
  • Pro časovaný Kinematic pohyb použijte move_kinematic nebo move_kinematic_euler.
  • Pro simulovanou rotaci použijte angular velocity, torque nebo angular impulse.

Low-Level / Advanced API#

Settery vracejí true při úspěchu a false při neplatném vstupu, invalidním nebo stale body či nepodporovaném motion typu. Gettery vracejí požadovanou hodnotu nebo undefined při selhání. High-level chybu zjistíte přes jolt_get_error().

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
JoltBody.clear_grab_rotationJoltBody.clear_grab_rotation()Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti.
JoltBody.get_grab_rotationJoltBody.get_grab_rotation()Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti.
JoltBody.get_rotationJoltBody.get_rotation()Světový {x, y, z} m / quaternion XYZW / Euler XYZ° / {position, rotation}, dle metody. undefined při chybě. Pozice je origin tělesa, ne COM.
JoltBody.get_rotation_eulerJoltBody.get_rotation_euler()Světový {x, y, z} m / quaternion XYZW / Euler XYZ° / {position, rotation}, dle metody. undefined při chybě. Pozice je origin tělesa, ne COM.
JoltBody.set_grab_rotationJoltBody.set_grab_rotation(x,y=undefined,z=undefined,w=undefined)Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti.
JoltBody.set_grab_rotation_eulerJoltBody.set_grab_rotation_euler(x,y,z)Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti.
JoltBody.set_rotationJoltBody.set_rotation(x, y, z, w = undefined)Boolean teleportu; světová pozice m, rotace XYZW nebo Euler XYZ°. set_rotation se třemi složkami znamená Euler°, se čtyřmi quaternion. Synchronizuje připojené senzory; pro pohyblivou plošinu použij move_kinematic.
JoltBody.set_rotation_eulerJoltBody.set_rotation_euler(x, y, z)Boolean teleportu; světová pozice m, rotace XYZW nebo Euler XYZ°. set_rotation se třemi složkami znamená Euler°, se čtyřmi quaternion. Synchronizuje připojené senzory; pro pohyblivou plošinu použij move_kinematic.