Zacząłem uczyć się biblioteki SFML i chciałem zaimplementować deltaTime, lecz nie udało mi się, Kiedy odpalam grę i klikam klawisze postać gracza nie porusza się w żadną stronę i jest cały czas w tym samym miejscu. Myślałem, że to może być problem z typami dlatego spróbowałem rzutowania typu float na "dt.asSeconds()" ale to nic nie dało. Dlaczego ten kod nie działa?
#include <iostream>
#include <SFML/Graphics.hpp>
int main(void)
{
// Creates a window
sf::RenderWindow window(sf::VideoMode(800, 600), "My game", sf::Style::Close);
// Creates a player
sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
player.setFillColor(sf::Color::Green);
player.setPosition(sf::Vector2f(350.0f, 450.0f));
// Clock for deltaTime
sf::Clock deltaClock;
sf::Time ActualFrame, LastFrame, dt;
while (window.isOpen())
{
// Delta time
ActualFrame = deltaClock.getElapsedTime();
dt = ActualFrame - LastFrame;
// Events loop
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
default:
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
{
player.move(-1.0f*dt.asSeconds(), 0.0f);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
{
player.move(1.0f*dt.asSeconds(), 0.0f);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
{
player.move(0.0f, -1.0f*dt.asSeconds());
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S))
{
player.move(0.0f, 1.0f*dt.asSeconds());
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape))
{
window.close();
}
}
LastFrame = ActualFrame;
deltaClock.restart();
window.clear();
window.draw(player);
window.display();
}
}