Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Problem z opóźnieniem sprintu

Ostatnio zmodyfikowano 2012-12-26 13:28
Autor Wiadomość
LukiPRO
Temat założony przez niniejszego użytkownika
[SFML 2.0] Problem z opóźnieniem sprintu
» 2012-12-25 14:58:22
Cześć, mam problem z opóźnieniem sprintu.
A mianowicie zrobiłem sobie żeby można było szybciej biegać przez 5 sekund a następnie trwa "regeneracja" przez 10 sekund.

Mój kod wygląda następująco:

C/C++
sf::Clock sprintDelay, sprintRecovery;

(...)

if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::LShift )
{
    if( sprintDelay.getElapsedTime().asSeconds() <= 5 )
    {
        charSpeed = 10.0f;
    }
}

(...)

if( sprintDelay.getElapsedTime().asSeconds() > 5 )
{
    charSpeed = 3.0f;
    if( sprintRecovery.getElapsedTime().asSeconds() > 15 )
    {
        sprintDelay.restart();
        sprintRecovery.restart();
    }
}

Po uruchomieniu gry można używać sprintu normalnie przez pierwsze 5 sekund.
Następnie trzeba poczekać te 10 sekund na odnowę.

Problem polega na tym że jeżeli po uruchomieniu gry i odczekaniu 5 sekund spróbuje użyć sprinta to nie mogę ponieważ muszę czekać 10 sekund na odmownie.
Tak samo jest po odczekaniu. Jeżeli przez 5 sekund nie użyjesz sprinta to trzeba czekać na jego ponowne odmownie mimo tego ze się tego sprinta nie użyło.

Wie ktoś co można by tu zrobić?

Myślałem żeby zacząć odliczać czas od momentu gdy gracz wciśnie Shift ale nie wiem czy tak można.

Dzięki z góry za pomoc.
P-71905
Mrovqa
» 2012-12-25 17:03:21
Myślałem żeby zacząć odliczać czas od momentu gdy gracz wciśnie Shift ale nie wiem czy tak można.
Jeśli działa, to czemu nie? Wyobraźnia jest jedynym ograniczeniem :)
Jeśli chcesz liczyć czas od użycia sprintu - to tam dopiero resetuj timer mając na uwzględnieniu, czy cooldown już minął :)
P-71918
LukiPRO
Temat założony przez niniejszego użytkownika
» 2012-12-26 03:53:06
Próbowałem na kilka sposobów to zrobić z tym restartowaniem gdy wcisnę Shift lecz za każdym razem mogę korzystać ze sprinta kiedy chcę.
P-71974
Mrovqa
» 2012-12-26 13:28:41
C/C++
sf::Clock sprintDelay, sprintRecovery;

(...)

if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::LShift )
{
    if( sprintDelay.getElapsedTime().asSeconds() <= 5 )
    {
        charSpeed = 10.0f;
    }
    else if( sprintRecovery.getElapsedTime().asSeconds() > 15 ) // dodaj to tu
    {
        charSpeed = 10.0f;
        sprintDelay.restart();
        sprintRecovery.restart();
    }
}

(...)

if( sprintDelay.getElapsedTime().asSeconds() > 5 )
{
    charSpeed = 3.0f;
    //if( sprintRecovery.getElapsedTime().asSeconds() > 15 /*albo wcisniety lewy shift*/ ) // lub to tak zmodyfikuj, ofc komentarz zastap kodem :)
    //{
    //    sprintDelay.restart();
    //    sprintRecovery.restart();
    //}
}
Wystarczy, że przy sprawdzaniu, czy minęło 15 sek sprawdzisz przy okazji, czy jest wciśnięty shift albo - zrobisz tak jak Ci pokazałem powyżej. Możliwości jest wiele :)
P-71991
« 1 »
  Strona 1 z 1