Forum - HAJLO.COMmunity [ forum dyskusyjne, kasa za posty, forum młodzieżowe, forum wielotematyczne ]


Nabór do ekipy forum!!! Więcej informacji: Napisz PW

Użytkownicy przeglądający ten wątek: 1 gości



(Allegro)5. Obsługa Klawiatury
(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)


Notatka od DamiaX, 07-12-2010 15:10:

Zamykam wątek ponieważ był on długo nie aktywny.
W celu otworzenia pisać na pw.





Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Linki

Copyrights

Tłumaczenie: Polski Support MyBB Silnik MyBB Styl: Darek