Я пытаюсь создать 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; }