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

[SFML] Problem z mierzeniem czasu ile sekund wciśnięty jest przycisk.

Ostatnio zmodyfikowano 2013-09-07 20:18
Autor Wiadomość
ison
» 2013-09-07 18:48:54
Jeśli nie chcesz gubić eventów
ale działa co jakieś 50 -te kliknięcie przycisku
to nie można.
P-91646
Bimbol
» 2013-09-07 19:32:28
Pokazałem prosty przykład, jeśli implementujesz to do swojej gry, to nie w ten sposób.

To powinno znaleźć się w pliku nagłówkowym z klasą Pilka.
enum Key { PRESSED, RELEASED };
 
Ten kod dobrze było by umieścić jako prywatne pola klasy Pilka, bo i tak odwołujesz się do nich w metodzie.
C/C++
Key Space;
sf::Clock clock;

W konstruktorze ustaw Space na RELEASED.

No i metoda strzalPilki, nieco zmodyfikowana, bez argumentu
sf::Clock & clock
, bo będzie nie potrzebny.
C/C++
bool Pilka::strzalPilki( float predkosc, sf::RenderWindow & okno, sf::Event & event )
{
    if( event.type == sf::Event::KeyPressed )
    if( event.key.code == sf::Keyboard::Space )
    {
        if( Space != PRESSED )
        {
            clock.restart();
            Space = PRESSED;
            cout << "Wcisnieto spacje" << endl;
        }
    }
    if( event.type == sf::Event::KeyReleased )
    if( event.key.code == sf::Keyboard::Space )
    {
        Space = RELEASED;
        cout << "Trzymales spacje przez: " << clock.restart().asSeconds() << endl;
    }
    return true;
   
}

Gra.cpp
C/C++
sf::Clock clock;
while( okno.isOpen() )
{
   
   
   
   
    gracz[ 0 ].graczMove( 1 );
    gracz[ 1 ].graczMove( 2 );
    Pilka.poruszajPilka();
    gracz[ 0 ].kolizjaGraczGracz( gracz );
    Pilka.kolizjaGraczPilka( gracz[ 1 ], 1 );
    Pilka.kolizjaGraczPilka( gracz[ 0 ], 0 );
    gracz[ 0 ].poruszajGracz( gracz[ 0 ].getPredkosc() );
    gracz[ 1 ].poruszajGracz( gracz[ 1 ].getPredkosc() );
    Pilka.isPilkaInBoisko( oknoKolizje );
    gracz[ 0 ].isInBoisko( oknoKolizje );
    gracz[ 1 ].isInBoisko( oknoKolizje );
   
   
    while( okno.pollEvent( zdarzenie ) )
    {
        Pilka.strzalPilki( 10, okno, zdarzenie ); // Zamiast clock, przekazujesz zdarzenie
    }

Nie mam pojęcia czy to zadziała, w tym już twoja głowa.
P-91649
kubawal
» 2013-09-07 19:37:58
Jeszcze parę uwag nt. stylu:
graczMove
isInBoisko
Nazwy metod pisz po angielsku, a jak nie umiesz to po polsku, a nie mieszanką :)

C/C++
enum Key { PRESSED, RELEASED };
Szybciej, prościej i czytelniej było by zastosować bool
C/C++
bool keyPressed = false;
P-91651
domin568
Temat założony przez niniejszego użytkownika
» 2013-09-07 20:18:42
Bardzo dziękuję za trafną odpowiedź Bimbol !! :) Co do stylu w następnym projekcie postaram się nazywać poprawnie :p
P-91652
1 « 2 »
Poprzednia strona Strona 2 z 2