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

[Allegro 5] Oczekianie na zwolnienie klawisza klawiatury

Ostatnio zmodyfikowano 2015-03-24 18:15
Autor Wiadomość
marianekA
Temat założony przez niniejszego użytkownika
[Allegro 5] Oczekianie na zwolnienie klawisza klawiatury
» 2015-03-24 14:37:18
Nie wiem czy dobry napisałem temat ale może nikt się nie przyczepi.
Chodzi mi oto żeby program oczekiwał na zwolnienie wciśniętego klawisza klawiatury. Jak to zrobić w przypadku klawisza myszki to wiem a w przypadku klawiatury to nie wiem.
Poniżej przykład z rozwiązaniem dla myszki a dla klawiatury czeka na Waszą pomoc
 
C/C++
#include <allegro5/allegro.h>
ALLEGRO_KEYBOARD_STATE klaw;
ALLEGRO_MOUSE_STATE mysz;
ALLEGRO_EVENT ev;
int main()
{
    al_init();
    al_install_mouse();
    al_install_keyboard();
    ALLEGRO_DISPLAY * okno = al_create_display( 400, 200 );
    while( !al_key_down( & klaw, ALLEGRO_KEY_ESCAPE ) )
    {
        al_get_keyboard_state( & klaw );
        al_get_mouse_state( & mysz );
       
        if( mysz.buttons == 1 )
        {
            al_clear_to_color( al_map_rgb( 111, 0, 0 ) );
            al_flip_display();
            while( !mysz.buttons == 0 ) al_get_mouse_state( & mysz );
           
            al_clear_to_color( al_map_rgb( 0, 111, 0 ) );
        }
       
        if( al_key_down( & klaw, ALLEGRO_KEY_SPACE ) )
        {
            al_clear_to_color( al_map_rgb( 111, 0, 0 ) );
            al_flip_display();
            // co tu wpisać?
            al_clear_to_color( al_map_rgb( 0, 111, 0 ) );
        }
        al_flip_display();
    }
    return 0;
}
.
 
P-129033
maly
» 2015-03-24 15:25:00
Takie coś?
C/C++
while( al_key_down( & klaw, ALLEGRO_KEY_SPACE ) )
     al_get_keyboard_state( & klaw );

Jednak wydaje mi się że lepiej użyć eventów zamiast sprawdzać stan.
P-129040
marianekA
Temat założony przez niniejszego użytkownika
» 2015-03-24 16:05:59
Sprawdziłem...działa tak jak chciałem i to mi wystarczy.
Mały, wielkie dzięki za odpowiedź i radę.
Temat zamykam.
P-129046
marianekA
Temat założony przez niniejszego użytkownika
» 2015-03-24 16:53:27
Jeszcze jedno... jak to przerobić by działało z dowolnym klawiszem a nie z wybranym jak w przykładzie. Dosłownie: jeśli żaden nie jest wciśnięty...
P-129052
maly
» 2015-03-24 17:30:26
Poprostu sprawdzić stan dla każdego klawisza lub jak wspomniałem wcześniej użyć eventów.
C/C++
bool keypressed()
{
    ALLEGRO_KEYBOARD_STATE klaw;
    al_get_keyboard_state( & klaw );
   
    for( int i = ALLEGRO_KEY_A; i < ALLEGRO_KEY_MAX; ++i )
    if( al_key_down( & klaw, i ) )
         return true;
   
    return false;
}
P-129055
marianekA
Temat założony przez niniejszego użytkownika
» 2015-03-24 18:15:28
już wszystko jasne, jeszcze raz dzięki.
P-129065
« 1 »
  Strona 1 z 1