Физика работает нормально (см. видео, зеленые квадратики - это тела )
Однако динамическое тело не пересекается со статическим.
Вот мой соответствующий код, который создает тело и форму.
Код: Выделить всё
body_ptr body{nullptr, cpBodyFree};
std::unordered_map mapping = {
{bodytype::stationary, [&body]() {
body = body_ptr(cpBodyNewStatic(), [](cpBody *body) { cpBodyFree(body); });
}},
{bodytype::kinematic, [&body]() {
body = body_ptr(cpBodyNewKinematic(), [](cpBody *body) { cpBodyFree(body); });
}},
{bodytype::dynamic, [&body, &size]() {
body = body_ptr(cpBodyNew(1.0, cpMomentForBox(1.0, size.width(), size.height())), [](cpBody *body) { cpBodyFree(body); });
}}
};
const auto p = j["physics"];
mapping[p["type"].get()]();
auto shape = shape_ptr(cpPolyShapeNew(body.get(), n, vertices, cpTransformIdentity, 0.0), [](cpShape *shape) { cpShapeFree(shape); });
cpShapeSetFriction(shape.get(), p.value("friction", 0.5f));
cpShapeSetElasticity(shape.get(), p.value("elasticity", 0.3f));
cpSpaceAddShape(_world->space().get(), shape.get());
cpSpaceAddBody(_world->space().get(), body.get());
Я искал, но старые решения используют функцию, которой больше не существует.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -collision