Witam, piszę gre w bibliotece SFML i nie wiem jak spowodować opóźnienie ruchu gracza.
Tzn, steruje pająkiem, który generuje nitkę. Strzalkami wybieram kierunek(dostępne tylko 4 - nie można na skos) a pająk po jednym naciśnięciu porusza się sam w wybranym kierunku(nie musze trzymac przycisku). Gdy klikam bardzo szybko, generowana nitka i pozycja pająka moze zmienić się nawet tylko o jeden piksel w osi OY lub OX. Ja chcę, by wykonanie zmiany kierunku odbyło po jakimś minimalnym czasie od ostatniej zmiany kierunku, tzn nawet jakbym klikał bardzo szybko na strzałki(co teraz powoduje zmiany o 1,2 piksele) to pająk skręcałby dopiero po pokonaniu tej minimalnej wymaganej odległości. Czyli, opóźnił bym jego zakręt, powodując tworzenie równych minimalnych odcinków z nitki.
Oczywiscie chciałbym by zapamiętał mi wciśnięty przycisk, i aby utworzyła się 'kolejka' wcisnietych przycisków, jeśli wstukamy ich na tyle dużo, że potem pająk nie będzie nadążał.
Jak uzyskać taki efekt?
moje metody, odpowiedzialne za ruch sprajta:
void sterowanie()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
doGory = true;
doDolu = false;
wLewo = false;
wPrawo = false;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
doDolu = true;
doGory = false;
wLewo = false;
wPrawo = false;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
wLewo = true;
doGory = false;
wPrawo = false;
doDolu = false;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
wPrawo = true;
doGory = false;
doDolu = false;
wLewo = false;
}
}
sf::Vector2f ruch(RenderWindow &oknoAplikacji)
{
v.x = 0;
v.y = 0;
if (doGory)
{
v.y -= predkosc;
animacje(oknoAplikacji);
}
else if (doDolu)
{
v.y += predkosc;
animacje(oknoAplikacji);
}
else if (wLewo)
{
v.x -= predkosc;
animacje(oknoAplikacji);
}
else if (wPrawo)
{
v.x += predkosc;
animacje(oknoAplikacji);
}
return v;
}