17 cze 2012

Lekcja 1.0.4 Allegro5 - klawiatura i time.

                                                                                                  Link -> Link do przykładowych programów
Aby sterować obiektami w programach, grach potrzebna jest nam znajomość obsługi klawiatury,
na początek mały przykładzik:
#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
int szer=320, wys=240, rozm=40;
int main()
{
    al_init();
    al_install_keyboard();
    al_init_font_addon();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    ALLEGRO_DISPLAY *okno = al_create_display( szer, wys);
    al_set_window_title( okno,"Allegro5 klawiatura i czas");
    ALLEGRO_BITMAP *kwadrat = al_create_bitmap(rozm,rozm);
    ALLEGRO_FONT * font8 = al_create_builtin_font();
    al_set_target_bitmap(kwadrat);
    al_clear_to_color(al_map_rgb(200,0,0));
    al_set_target_bitmap(al_get_backbuffer(okno));
    int x=140, y=100;
    double czas = al_get_time()
    while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))
    {
        al_get_keyboard_state(&klawiatura);
        if ( al_get_time() > czas + 0.01)
        {
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT )   && x  <  szer-rozm) x=x+1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_LEFT  )    && x  >               0) x=x- 1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_DOWN  ) && y < wys  -rozm) y=y+1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_UP    )      && y  >               0) y=y- 1 ;
            czas = al_get_time();
        }
        al_clear_to_color(al_map_rgb_f(0.5,0.5,0.5));
        al_draw_bitmap (kwadrat,x,y,0);
        al_draw_textf(font8,al_map_rgb(255,255,0), 10, 10, 0,"x=%3d , y=%3d", x, y); 
        al_flip_display();
        al_rest(0.001);
    }
    al_destroy_bitmap(kwadrat);
    al_destroy_display(okno);
    return 0;
}
Opis:
int szer=320, wys=240, rozm=40;// wysokość i szerokość ekranu, utworzymy, wielkość kwadratu.
al_install_keyboard();// instalujemy klawiaturę.
A tak, al_uninstall_keyboard();// odinstalowujemy klawiaturę.
ALLEGRO_KEYBOARD_STATE klawiatura;// tworzymy zmienną do struktury stanów klawiatury.
while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))// początek pętli głównej,sprawdzenie czy wciśnięty klawisz escape, kończący program.
al_get_keyboard_state(&klawiatura); //odczyt stanu klawiatury
if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT )   && x  <  szer-rozm) x=x+1 ;//sprawdzenie jaki klawisz wciśnięty i czy pozycja x (minus szerokość bitmapy) większa od szerokości ekranu.
Kody klawiszy <-link
double czas = al_get_time();//zwraca liczbę sekund od czasu zainicjowania

4 komentarze:

Senatek pisze...

Można by dodać jeszcze- czy klawisz został wciśnięty (nie zależnie jaki).

Unknown pisze...

Bardzo fajna seria poradników, niestety czasami brakuje podstawowych informacji dla początkujących (czyli dla mnie ;). Mam nadzieję że pojawią się jeszcze kiedyś artykuły o Allegro 5.

Pozdrawiam!

Anonimowy pisze...

Program u mnie błędny i nie działa, musialem dopisać linie:
al_get_keyboard_state(&klawiatura)
przed petla while()

Anonimowy pisze...

@Anonimowy co znaczy że program błędny? program jest poprawny tylko stan klawiatury jest pobrany dopiero w pętli...