使用Box2D和SFML添加2个不同的物体时出现问题

时间:2019-05-31 14:20:55

标签: c++ box2d sfml

我正在尝试创建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;

}

0 个答案:

没有答案