Hej,
z tego co widze w dokumentacji
float dt = clock.restart().asSeconds();
https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Clock.php#a123e2627f2943e5ecaa1db0c7df3231b
zawsze zwroci zero bo restart zeruje zegar
po drugie jedna klatka w grze przy 60 fps to 16ms, jak bedziesz wyciagal sekundy to zawsze dostaniesz 0, wiec musisz wyciagac milisekundy.
po trzecie delta time to powinna byc wartosc ile czasu zajelo przeliczenie klatki
dt to delta time czyli ile czasu minelo od ostatniej klatki wiec z tym clockiem to raczej powinno wygladac mniej wiecej tak (przesunalem tylko metody od clock w inne miejsce):
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
}
float dt = clock.asMilliseconds();
clock.restart();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
player.move(sf::Vector2f(-1.0f*dt, 0.0f));
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
player.move(sf::Vector2f(1.0f*dt, 0.0f));
}
if (event.type == sf::Event::KeyPressed)
{
if (event.key.code == sf::Keyboard::Space && !space_key_pressed)
{
space_key_pressed = true;
}
}
else if (event.type == sf::Event::KeyReleased)
{
if (event.key.code == sf::Keyboard::Space && space_key_pressed)
{
space_key_pressed = false;
}
}
}
for (int i = 0; i < 5; i++)
{
enemies[i].move(sf::Vector2f(5.0f, 2.0f));
if (enemies[i].getPosition().x >= 800)
{
enemies[i].move(sf::Vector2f(-5.0f, 2.0f));
}
}
window.clear();
window.draw(player);
for (int i = 0; i < 5; i++)
{
window.draw(enemies[i]);
}
window.display();
}