Проблема с добавлением 2 разных тел с использованием Box2D и SFML - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь создать 2 разных динамических тела, которые будут отображаться в разных позициях: ящик и игрок. Проблема в том, что с моим текущим кодом он правильно создает два тела, но применяет обе текстуры друг над другом. Я признаю, что проблема вызвана тем, что внутри if (i->GetType() == b2_dynamicBody), но я не могу найти решение для этого.

Вот мой текущий код:

while (window.isOpen())
{
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
    {
        CreateBox(World, 400.f, 64.f);
    }
    World.Step(1 / 60.f, 8, 3);
    window.clear();





    for (b2Body* i = World.GetBodyList(); i != 0; i = i->GetNext())
    {
        if (i->GetType() == b2_dynamicBody)
        {
            sf::Sprite Box;
            Box.setTexture(BoxTexture);
            Box.setOrigin(32.f, 32.f);
            Box.setPosition(SCALE * i->GetPosition().x, SCALE * i->GetPosition().y);
            Box.setRotation(i->GetAngle() * 180 / b2_pi);
            window.draw(Box);

            sf::Sprite Player;
            Player.setTexture(PlayerTexture);
            Player.setOrigin(16.f, 32.f);
            Player.setPosition(SCALE * i->GetPosition().x, SCALE * i->GetPosition().y);
            window.draw(Player);

        }
        else
        {
            sf::Sprite GroundSprite;
            GroundSprite.setTexture(GroundTexture);
            GroundSprite.setOrigin(0.f, 0.f);
            GroundSprite.setPosition(0.f, 536.f);
            window.draw(GroundSprite);

        }

    }   

    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }

    window.display();

}


return 0; }
...