You are on page 1of 4

Allegro_Lab_1

Expanding Allegro_Time_Loop
Developer: Amar Tufo
Datum: 1. Oktobar, 2015

Slika1: Allegro frames app


Ova slika prikazuje rendering fonta koji mjeri frajmove odnosno vrijeme brzinu
kojom se aplikacija pokree i kojom radi. U nastavku ove kratke vjebe bit e
prikazan izvorni kod Allegro_Time_Loop aplikacije kojom je deklariran FPS i
tajmer koji diktira brzinu rada programa na tano 60 frejmova po sekundi to jeste
svakih 60 sekundi.
Kljune rijei: Allegro5, Visual C++, FPS,

Zadatak:

Slika2: Osnovna game_petlja bez escape sekvence


Ova game petlja nainjena je koristei while petlju te nema implementiran nain
zatvaranja programa.
Va zadatak je da instalirate allegro_keyboard i kreirate escape_exit_mode u ovoj
petlji tako da korisnik moe zatvoriti aplikaciju pritiskom escape tastera na
tastaturi.
Prvo na program poinje implementacijama odreenih varijabli kao to je bool exit
= false;. Ovom linijom koda je deklarirana varijabla exit bulean tipa. ta to znai?
Dakle, program diktira raunalu odreen event na koji se program aktivira recimo,
da li je korisnik pritisnuo taster escape ako jeste u tom sluaju zatvori program pa e
tada biti bool exit = true.
U osnovi, ovo je nain implementacije escape rutine ali ona jo nije gotova. Obzirom
kako se radi o escape tasteru treba svakako da imamo na umu kako radimo sa
tastaturom. Na odreen nain, tastatura se treba instalirati u allegro program kako
bi escape taster radio kako treba.
Instalacija tastature u Allegro API-u bi se uradila ovom linijom koda:
all_install_keyboard( );. Nakon to je tastatura instalirana potrebno je registrovati
event source ili izvor s kojeg raunalo dobavlja akciju kao to je pritisak escape
tastera
na
tastaturi.
To
radimo
narednom
linijom
koda:
al_register_event_source(event_queue, al_get_keyboard_event_source( ));.

Sada treba da kreiramo odreen event na koji raunalo reaguje u programu a to


radimo ovom linijom koda:
//creating allegro event

ALLEGRO_EVENT ev;
al_wait_for_event(event_queue, &ev);
U osnovi ovom linijom koda ( al_wait_for_event(event_queue, &ev);) Allegro eka
na odreeni event kako bi reagovao i izvravao ono to mu izvorni kod diktira.
Recimo, eka da korisnik pritisne odreeni taster na tastaturi koji zatim biva
zabiljeen u varijabli ev koja provjerava da li je odreena tipka na tastaturi
pritisnuta ukoliko jeste program e nastaviti svoje izvravanje ili e se prekinuti.
I posljednje to treba da uinimo jeste da implementiramo nain zatvaranja
programa pritiskom tastera escape to bi izgledalo ovako:
if (ev.type == ALLEGRO_EVENT_KEY_UP)
{
if (ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
exit = true; //program se zatvara
}
Evo o emu se ovdje radi. Nakon to korisnik pritisne taster escape, Alelgro
provjerava da li je ista tipka pritisnuta. Nakon to korisnik otpusti taster escape onda
se program zatvara exit = true;. Relativno je jednostavna implementacija ovakve
rutine za zatvaranje jer u vaoj igrici elite da korisnik prekine nasilno program
pritiskom escape tastera ukoliko se on zaledi i glavni meni postane neodzivan ili
bagovit.
Sada bi na cio kod implementacije escape rutine za zatvaranje izgledao ovako.
int main( ){
bool exit = false;
//install allegro primitives
al_initialise_primitives_addon( );
//install keyboard
al_install_keyboard( );
//register keyboard source
event_queue = al_create_event_queue();
al_register_event_source(event_queue, al_get_keyboard_event_source( ));

//create basic game loop


while(!exit)
{
//creating allegro event
ALLEGRO_EVENT ev;
al_wait_for_event(event_queue, &ev);
//draw some text on the screen
al_draw_text(font36,
al_map_rgb(255,
127,
127),
ALLEGRO_ALIGN_CENTRE, "Developer: Amar Tufo");

640/2,

480/2,

//allow user to exit by pressing escape key


if (ev.type == ALLEGRO_EVENT_KEY_UP)
{
if (ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
exit = true;
}
//back buffer
al_flip_display( );
//clear back buffer
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
return 0;
}
Cijela while petlja sa implementiranom escape rutinom izgleda kao u kodu koji
vidite. Napomena: Ovo je samo dio koda koji prikazuje bolju implementaciju while
petlje te kao takav nee raditi ukoliko se ne napie u cjelosti. No, to nije dio ovog
laba pa to ostavljam sebi za sljedei put i vama da sami napiete cio kod i neto iz
ovoga nauite.
Zadatak2: Kreirati novi projekat pod nazivom Allegro_Lab1 te proiriti ovaj dio
koda sa while petljom i uitati custom font kells.ttf koji prikazuje poruku sa imenom i
prezimenom.

You might also like