Pojedyncze wciśnięcie klawisza.
Ostatnio zmodyfikowano 2012-08-21 22:59
unimator Temat założony przez niniejszego użytkownika |
Pojedyncze wciśnięcie klawisza. » 2012-08-21 22:34:54 Witam. Mój program wyświetla tak jakby kilka obrazków po sobie. Coś w rodzaju pokazu slajdów. Po wyświetleniu pierwszego należy wcisnąć dowolny przycisk na klawiaturze by pokazał się drugi itd. Problem polega na tym, że jak raz wcisnę jakiś przycisk to do bufora (zdaje się, że to tak się nazywa :P) trafia kilka znaków i program wykrywa to tak, jakbym wcisnął przycisk kilkanaście razy. Innymi słowy, nie wykrywa pojedynczego wciśnięcia klawisza a wielokrotne. Używam biblioteki Allegro i funkcji keypressed() (zwraca TRUE jak wciśnięty, FALSE jak nie). Kiedyś używałem zmiennej key[PRZYCISK] do sprawdzenia stanu danego klawisza i wyglądała ona mniej więcej tak: bool press = false;
while( true ) { if( !press && key[ PRZYCISK ] ) { press = true; } else if( !key[ PRZYCISK ] ) press = false; }
W przypadku funkcji keypressed() zamiast key[PRZYCISK] to już niestety nie działa. Prosiłbym o jakieś propozycje rozwiązania problemu. Funkcje mogą być spoza biblioteki Allegro, aby były powszechne. Po prostu zależy mi na jakimś prostym i sprawnym rozwiązaniu. |
|
diego997 |
» 2012-08-21 22:41:01 Ja zawsze robię tak bool isPressed = 0;
if( !isPressed ) if( key.isPressed( key::A ) ) { isPressed = 1; } else isPressed = 0;
Jeżeli nie chcesz zeby za każdym razem ci przypisywał 0 do isPressed to else { if( isPressed ) isPressed = 0; }
|
|
unimator Temat założony przez niniejszego użytkownika |
» 2012-08-21 22:45:44 Tak, ale czy to nie działa dla jakiegoś specyficznego przycisku ^^? Mi chodzi o funkcję, która by to sprawdzała dla dowolnego przycisku. Z pojedynczym to sobie już poradzę, tylko z tym dowolnym coś nie chcę działać :/ |
|
diego997 |
» 2012-08-21 22:49:31 w sfml jak nie podam niczego w nawiasie to traktuje to jak dowolnie wcisniety klawisz ;p
EDIT: jest jeszcze jedna z biblioteki <conio.h> ale to chyba tylko z poziomu konsoli kbhit();
|
|
Admixior |
» 2012-08-21 22:59:37 Jeśli chodzi o sfml to bym mógł nawet podać gotową funkcję bo kiedyś robiłem z powolnym przenikaniem... ... Ale nie wiem w jaki sposób jest to w allegro ale może zainteresujesz się kolejką komunikatów tam są wysyłane "normalnie" znaki czyli jak naciśniesz to że został wciśnięty i jak zwolnisz - to że zwolniony. Ew. Jak coś to możesz sobie taką funkcję sam napisać i zdefiniować tablice 256 elementową i za każdym razem sprawdzasz... bool isPressed[ 256 ]; bool fun() { bool ret = false; for( int i = 0, i < 256; i++ ) { if( !isPressed[ i ] ) if( keypressed( i ) ) { if( isPressed[ i ] ) continue; isPressed[ i ] = 1; ret = true; } else { if( !keypressed( i ) ) isPressed[ i ] = 0; } } return ret; }
kod może zawierać błędy |
|
« 1 » |