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

Pojedyncze wciśnięcie klawisza.

Ostatnio zmodyfikowano 2012-08-21 22:59
Autor Wiadomość
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:
C/C++
bool press = false;

while( true )
{
    //...
   
    if( !press && key[ PRZYCISK ] )
    {
        press = true;
        //Cos do czego potrzebowalem pojedyncze wcisniecie
    }
    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.
P-63249
diego997
» 2012-08-21 22:41:01
Ja zawsze robię tak

C/C++
bool isPressed = 0;

if( !isPressed )
if( key.isPressed( key::A ) )
{
    //INSTRUKCJE
    isPressed = 1;
}
else
     isPressed = 0;

Jeżeli nie chcesz zeby za każdym razem ci przypisywał 0 do isPressed to

C/C++
else
{
    if( isPressed )
         isPressed = 0;
   
}
P-63253
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ć :/
P-63255
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();

P-63256
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...
C/C++
bool isPressed[ 256 ];
bool fun() //zwraca true jeśli następny slajd
{
    bool ret = false;
    for( int i = 0, i < 256; i++ )
    {
        if( !isPressed[ i ] )
        if( keypressed( i ) )
        {
            //INSTRUKCJE
            if( isPressed[ i ] ) continue;
           
            isPressed[ i ] = 1;
            ret = true;
        }
        else
        {
            if( !keypressed( i ) )
                 isPressed[ i ] = 0;
           
        }
    }
    return ret;
}
kod może zawierać błędy
P-63258
« 1 »
  Strona 1 z 1