V tutoriálech popisujících SDL skoro vždy zpracování událostí demonstrují na následujícím kódu:
SDL_Event event;
while( SDL_PollEvent( &event ) ){
switch( event.type ){
case SDL_KEYDOWN:
printf( "Key press detected\n" );
break;
case SDL_KEYUP:
printf( "Key release detected\n" );
break;
default:
break;
}
}
Pokud budu načítat tři obrázky, které následně zobrazím, počkám na stisknutí křížku nebo ESC a celou aplikaci ukončím, bude mi něco podobného stačit.
V případě že budu mít několik objektů (dejme tomu - okno, tlačítko, textové pole), které se mají v reakci na události nějak chovat, bude situace trochu složitější. V zásadě mě napadla dvě řešení:
A) Do každého objektu vložit metodu handleEvents(SDL_Event *event). Tato metoda projde všechny události které jsou pro daný objekt zajímavý a něco udělá.
while( SDL_PollEvent( &event ) ){
switch( event.type ){
case SDL_KEYDOWN:
printf( "Key press detected\n" );
break;
case SDL_KEYUP:
printf( "Key release detected\n" );
break;
default:
break;
}
// button.handleEvents(&event);
}
B) Druhá možnost, která mě napadla byla vytvoření jednoho hlavního objektu, který by v sobě uschovával seznam akcí na které chci reagovat a funkcí, které se v reakci na událost mají spustit.
Do tohoto objektu bych některou metodou přidal tzv. listenery pro každý objekt, který se má chovat v závislosti na událostech. Místo toho abych do hlavní smyčky programu vložil pro každý objekt řádek s mujobjekt.handleEvent(&event), stačilo by volání hlavního objektu, který by se o zbytek postaral.
Používá se v reálu některá z mnou popsaných metod, nebo se pro zpracování událostí a předání informací o události ostatním objektům používá něco úplně jiného?
Děkuji za vaše odpovědi,
Lorin