hincu |
» 2012-02-19 13:26:15 skompiluj sobie kod przechwytywania klawiszy bez timerow i zobaczysz jak szybko 'drukuje' ci kolejne znaki : P |
|
akwes |
» 2012-02-19 14:31:08 Timery mogą Ci być potrzebne, ale nie muszą. Zależy jaką aplikację piszesz. Jeżeli to gra, to prędzej czy później będą musiały się pojawić, jeżeli trenujesz używanie sf::Input, sf::Event to nie koniecznie ;)
Co to sf::Event, chodziło mi o to czy pobierasz sf::Event więcej jak jeden raz w czasie obiegu pętli? |
|
maestro Temat założony przez niniejszego użytkownika |
» 2012-02-19 19:58:46 Jak napisałem w kodzie znajduje się sf::Input i sf::Event if( sterowka2.IsKeyDown( sf::Key::W ) ) { ra[ 1 ] += 0.1; }
if( sterowka2.IsKeyDown( sf::Key::S ) ) { ra[ 1 ] -= 0.1; }
if( sterowka2.IsKeyDown( sf::Key::D ) ) { ka[ 1 ] -= 5; }
if( sterowka2.IsKeyDown( sf::Key::A ) ) { ka[ 1 ] += 5; }
if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::X ) { start += 1; if( start > 2 ) { start = 1; } }
if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::V ) { start = 3; }
jak widać sf::Event pobieram kilka krotnie (proces) a wcześniej nie było sf::Input i wszystko było razem w sf::Event proces; |
|
akwes |
» 2012-02-19 20:29:45 Widzę, że nie dogadamy się :P Może tak: #include <SFML/Window.hpp>
int main() { sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" ); while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { } oknoAplikacji.Display(); } return 0; }
Kod z kursu. Jeżeli odczytujesz cokolwiek z sf::Event poza tą pętelką (ewnentualnie można wysłać gdzieś coś przez funkcję, ale to i tak musi być w tej pętli) to nie będzie miało sensownych wartości. Natomiast sf::Input, działa wszędzie. |
|
maestro Temat założony przez niniejszego użytkownika |
» 2012-02-19 21:50:26 no okej ale podałem że Event ma te samą nazwę wiadomo gdzie ma być po prostu naciskałem strzałkę w prawo i do przodu i nie działały jednocześnie ,ale dziwi mnie to dlaczego Event działa tylko raz na cały skład napisałem jak korzystam z Event i z Input dla każde jest kilka opcji o czytaj tu poniżej ja byk pisze teraz i pisałem wcześniej nie wiem czego ci brakuje if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::X ) { start += 1; if( start > 2 ) { start = 1; } }
if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::V ) { start = 3; }
właściwie to dotyczy zmiennej start ale przecież na przykład może tam w jednej x ,a w drugiej y |
|
akwes |
» 2012-02-19 23:21:08 if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::X ) { x++; system( "cls" ); cout << "x=" << x << " y=" << y; }
if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::V ) { y++; system( "cls" ); cout << "x=" << x << " y=" << y; }
Działa tak jak powinno. W zależności, który klawisz był wciśnięty ostatnio ten działa. Jeżeli kliknę oba naraz (naraz, nie jeden po drugim) to zwiększają oba. KeyPressed, czyli klawisz wciśnięty. 1: Wciskam klawisz A 2: Wciskam klawisz B, nie puszczając A. To będzie działał klawisz B. Chyba że 1: Wciskam naraz klawisz A i B, wtedy działają oba, bo oba były ostatnio wciśnięte. |
|
maestro Temat założony przez niniejszego użytkownika |
» 2012-02-20 00:10:41 nie ma takiej siły żeby oba działały (ale zabawne :D )nie w sfml sf::Event tak samo jak się pisze tekścik nie napisze obu znaków na raz nawet najmniejsza jednostka czasu na to wpłynie nawet pomiędzy tymi wciśnięciami zrobi się kilka pętli (a może i więcej) :) na przykład gdy bym robił metin -a to by użył ,i Event ,i Input (ale gdy by były tam samochody to Input ważna rzecz)
|
|
akwes |
» 2012-02-25 23:04:17 No proszę, u mnie jednak działały. Jeżeli tylko zostały razem wciśnięte, nie zawsze się udawało od razu, ale udawało. Z kodem, który jest wyżej. |
|
1 « 2 » 3 |