domin568 Temat założony przez niniejszego użytkownika |
[SFML] Problem z mierzeniem czasu ile sekund wciśnięty jest przycisk. » 2013-09-07 13:28:44 Witam , mam problem jak dobrze obliczyć jak długo wciśnięta jest spacja , na potrzeby obliczania siły strzału . Mój kod to : if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) ) { sf::Clock clock; sf::Time elapsed1 = clock.getElapsedTime(); std::cout << elapsed1.asMilliseconds() << std::endl; }
Jednak gdy wciskam spacje to pokazuje mi 0 . Jak można to poprawnie zrobić ?? |
|
MrPoxipol |
» 2013-09-07 13:43:55 if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space ) { clock.restart(); }
if( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Space ) { sf::Time t = clock.getElapsedTime(); std::cout << t.asSeconds() << std::endl; }
gdzie clock to globalny obiekt klasy sf::Clock. Czy było to takie trudne? Wystarczy przemyśleć jak to ma działać i wszystko widać w kodzie. W powyższym kodzie mogą być błędy, bo z jest z głowy. Co do Twojego kodu, to wystarczy zerknąć w dokumentacje i zobaczysz co robi metoda restart() ;) |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-09-07 14:45:06 Ta metoda niby działa , ale działa co jakieś 50 -te kliknięcie przycisku . Tak jakby bardzo trudno by mu było załapać to . Gracz.cpp bool Pilka::strzalPilki( float predkosc, sf::RenderWindow & okno ) { while( okno.pollEvent( event ) ) { if( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::C ) { cout << "AAAA" << endl; clockk.restart(); } if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::C ) { cout << "AAAA " << endl; sf::Time t = clockk.getElapsedTime(); std::cout << t.asSeconds() << std::endl; } } return true; }
Gra.cpp while( okno.pollEvent( zdarzenie ) ) { Pilka.strzalPilki( 10, okno ); }
|
|
killjoy |
» 2013-09-07 14:49:43 Rób to na bezpośrednim dostępie do klawiatury, zamiast na eventach. |
|
Bimbol |
» 2013-09-07 15:14:43 #include <SFML/Graphics.hpp> #include <iostream>
using namespace std;
int main() { enum Key { PRESSED, RELEASED }; Key Space = RELEASED; sf::Clock clock; sf::RenderWindow Window( sf::VideoMode( 800, 600 ), "Czasomierz" ); while( Window.isOpen() ) { sf::Event Event; while( Window.pollEvent( 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 EXIT_SUCCESS; }
Masz przykład, o ile o to Ci chodziło :) |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-09-07 15:32:01 Bimbol dzięki za pomoc , jeżeli ten kod skopiuje na czysty projekt to mi działa , ale jak chce to wykorzystać w mojej grze to już jest źle . Jak wykorzystuje go w grze : metoda w klasie : bool Pilka::strzalPilki( float predkosc, sf::RenderWindow & okno, sf::Clock clock ) { enum Key { PRESSED, RELEASED }; Key Space = RELEASED; while( okno.pollEvent( 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 miejsce wywołania : 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, clock ); }
|
|
MrPoxipol |
» 2013-09-07 16:00:18 Masz podwójnie pollEvent().. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-09-07 16:30:33 Mimo usunięcia tego nic mi to nie dało . A poza tym można tak robić . |
|
« 1 » 2 |