(14-11-2010 20:01) #1
(Allegro)5. Obsługa Klawiatury
Obsługa klawiatury
Lecimy z tym materiałem, że aż milo J. Teraz wprawmy w ruch nasze paintowe ludziki! Lecz na początek prosty kodzik:
Kod:
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
clear_to_color(screen,makecol(10,10,10));
//char klawisz;
int klawisz = 0;
while( !key[KEY_ESC])
{
klawisz = readkey();
clear_to_color(screen,makecol(10,10,10));
textprintf(screen,font,20,20,makecol(255,255,128),"Klawisz to : %d",klawisz);
}
allegro_exit();
return 0;
}
END_OF_MAIN();
Ten kod ma za zadanie wyświetlić numer ostatnio naciśniętego klawisza. Czasami może się przydać. A teraz szczegółowe badanie.
Kod:
while( !key[KEY_ESC])
{
klawisz = readkey();
clear_to_color(screen,makecol(10,10,10));
textprintf(screen,font,20,20,makecol(255,255,128),"Klawisz to : %d",klawisz);
}
I tu pojawia się coć nowego, pętla nieskończoności. Działa ona tak długo, aż nie naciśniemy klawisza ESC.
if ( key[ klawisz ])- linijka kodu sprawdzająca naciśnięty klawisz. W miejsce klawisz możemy postawić:
Kod:
// literki od A do Z
KEY_A ... KEY_Z,
// cyferki od 1 do 9
KEY_0 ... KEY_9,
// cyferki od 1 do 9 na klawiaturze numerycznej
KEY_0_PAD ... KEY_9_PAD,
// klawisze od F1 do F12
KEY_F1 ... KEY_F12,
// ESCape, ENTER i SPACJA
KEY_ESC, KEY_ENTER, KEY_SPACE,
// i chba najlepsze : strzałki ;]
KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN,
Już umiemy obsługiwać klawisze I znamy ich kody. Napiszmy program, który wprawi w ruch naszą postać.
Kod:
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
clear_to_color(screen, makecol(128,128,128));
BITMAP *ludek = NULL;
ludek = load_bmp("ludek.bmp",default_palette);
if (!ludek)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("nie mogę załadować obrazka Ludek !");
allegro_exit();
return 0;
}
int ludek_x = 100, ludek_y = 100;
Teraz pętla nieskończoności i sprawdzanie klawiatury.
Kod:
while( !key[KEY_ESC])
{
if( key[KEY_LEFT]) ludek_x--;
if( key[KEY_RIGHT]) ludek_x++;
if( key[KEY_UP]) ludek_y--;
if( key[KEY_DOWN]) ludek_y++;
//clear_to_color(screen, makecol(10,10,10));
//rest(1);
masked_blit( ludek, screen, 0,0, ludek_x, ludek_y, ludek->w, ludek->h);
}
destroy_bitmap(ludek);
allegro_exit();
return 0;
}
END_OF_MAIN();
Zapewne nasz ludek przesuwa się z zawrotną prędkością. Dodajmy więc do naszej pętli nieskończoności pewną linijkę kodu:
Rest(10);- funkcja ta powoduje zatrzymanie programu na określony czas. Są to milisekundy a ich liczba jest wyświetlona w nawiasie.
Jak zapewne zauważyliście, nasz ludek się rozmazuje. Aby temu zapobiec potrzebne będzie podwójne buforowanie, ale o tym na następnej lekcji.
(Autor artykułu: MakiMaki)
(Autor kodu: EasyKoder)
(Autor kodu: EasyKoder)
Notatka od DamiaX, 07-12-2010 15:10:
Zamykam wątek ponieważ był on długo nie aktywny. |