-
Nikitos создал
Продолжение разбора суставов. Обещание «восемь видов» оказалось устаревшим ещё сильнее, чем казалось: в b2JointType Box2D v3 остались только distance, filter, motor, mouse, prismatic, revolute, weld, wheel. Блока (pulley) и зубчатой передачи (gear) в движке НЕТ — это суставы Box2D v2. Обещать их нельзя ни в каком виде, поэтому в документации это сказано прямо. * physics: R2D_JOINT_MOUSE и R2D_JOINT_FILTER, r2d_physics_set/get_joint_target; * script.c: разбор 'mouse'/'filter', engine.setJointTarget(id, x, y) и engine.jointTarget(id); * $.world.jointTarget(id, x, y) — цель mouse-сустава; * сила mouse-сустава по умолчанию берётся из МАССЫ тела: значение Box2D по умолчанию (1 Н) не подняло бы и килограмма, и перетаскивание не работало бы даже теоретически; * НАЙДЕН ДЕФЕКТ: Box2D v3 не будит тела созданием сустава. Только что созданный сустав не действовал на уснувшее тело — теперь оба тела будятся при создании сустава (касается всех видов). ЧЕСТНО ПРО НЕПРОВЕРЕННОЕ: тяга mouse-сустава не работает — тело к цели не поехало ни в тесте, ни в отдельной пробе. Проверено, что параметры верные: тело A статическое, B динамическое, масса 0.56 кг, сила 500000 Н, цель задана. Причину найти не удалось, поэтому в тесте проверяется только создание и перестановка цели, а в world.md/API.md прямо написано «не полагайтесь» с альтернативой (castShape/bodyAt + applyImpulse). Проверка: tests/agent/highlevel_joints_test.py (13 проверок), полный набор qjs, агентских тестов, doc_coverage и doc_claims зелёный.
9c95fb9a