Box2d и SFML | Как создать треугольник с адекватной физикой?

Не как не получается написать класс Triangle, объект которого будет работать нормально. Объект класса Triangle не сталкивается с остальными физическими объектами. Для создания треугольника использую sf::ConvexShape, методы для обновления и рендеринга а так же конструктор класса я оставлю ниже.

Triangle::Triangle(b2World* world, float base, float height, float x, float y)
    :_world(world)
{
    this->_triangle.setPointCount(3);

    this->_triangle.setPoint(0, sf::Vector2f(0.0f, 0.0f));
    this->_triangle.setPoint(1, sf::Vector2f(base, 0.0f));
    this->_triangle.setPoint(2, sf::Vector2f(base / 2.0f, -height));

    this->_triangle.setFillColor(sf::Color::Blue);
    this->_triangle.setPosition(sf::Vector2f(x, y));

    this->setOriginToCenter();

    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(x + base / 2, y - height / 2);
    this->_body = this->_world->CreateBody(&bodyDef);

    if (!this->_body)
    {
        std::cerr << "Warning: _body is nullptr in Triangle::Triangle" << std::endl;
    }

    b2PolygonShape triangleShape;
    b2Vec2 vertices[3];
    vertices[0].Set(0.0f, 0.0f);
    vertices[1].Set(base, 0.0f);
    vertices[2].Set(base / 2, -height);
    triangleShape.Set(vertices, 3);

    b2FixtureDef fixtureDef;
    fixtureDef.shape = &triangleShape;
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.5f;
    this->_body->CreateFixture(&fixtureDef);
}


void Triangle::update(float deltaTime, sf::RenderWindow& window)
{
    this->_world->Step(deltaTime, 8, 3);

    b2Vec2 position = this->_body->GetPosition();
    float angle = this->_body->GetAngle();

    _triangle.setPosition(position.x, position.y);
    _triangle.setRotation(angle * (180.0f / b2_pi));
}

void Triangle::render(sf::RenderWindow& window)
{
    window.draw(_triangle);
}

Ответы (0 шт):