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