[Precedente]
Contenuti
[Successivo]
Usare la Simple DirectMedia Layer API
Gli Eventi
Per l'attesa di eventi e' utilizzata la funzione
SDL_WaitEvent().
|
Suggerimento:
SDL ha il sopporto internazionale per la tastiera, traduzione degli
eventi associati ai tasti e piazzamento dell'equivalente UNICODE nel
membro event.key.keysym.unicode. Dal momento che questo processo
produce oveheard, deve essere abilitato con la funzione SDL_EnableUNICODE(). |
Esempio:
{
SDL_Event event;
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_KEYDOWN:
printf("Il tasto %s e' stato premuto!\n",
SDL_GetKeyName(event.key.keysym.sym));
break;
case SDL_QUIT:
exit(0);
}
}
|
Il controllo degli eventi e' realizzato dalla funzione
SDL_PollEvent().
|
Suggerimento:
E' possibile leggere gli eventi nella coda degli eventi
senza rimuoverli passando SDL_PEEKEVENT alla funzione
SDL_PeepEvents(). |
Esempio:
{
SDL_Event event;
while ( SDL_PollEvent(&event) ) {
switch (event.type) {
case SDL_MOUSEMOTION:
printf("Il Mouse e' stato mosso da %d,%d " \
"a (%d,%d)\n",
event.motion.xrel, event.motion.yrel,
event.motion.x, event.motion.y);
break;
case SDL_MOUSEBUTTONDOWN:
printf("Il pulsante %d del Mouse %d e' stato " \
"premuto a (%d,%d)\n",
event.button.button, event.button.x,
event.button.y);
break;
case SDL_QUIT:
exit(0);
}
}
}
|
- Controllo dello stato degli eventi
Oltre a poter gestire in modo diretto gli eventi,
ogni tipo di evento ha una funzione che permette di
controllare il suo stato. Se si usa esclusivamente questo
sistema, e' possibile ignorare tutti gli eventi con la
funzione SDL_EventState(), e chiamare la funzione
SDL_PumpEvents() in modo periodico per aggiornare lo
stato degli eventi dell'applicazione.
|
Suggerimento:
E' possibile mostrare o nascondere il puntatore del mouse
con la funzione SDL_ShowCursor(). |
Esempio:
{
SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
}
void CheckMouseHover(void)
{
int mouse_x, mouse_y;
SDL_PumpEvents();
SDL_GetMouseState(&mouse_x, &mouse_y);
if ( (mouse_x < 32) && (mouse_y < 32) ) {
printf("Il Mouse e' nell'angolo in alto a sinistra!\n");
}
}
|
[Precedente]
Contenuti
[Successivo]
|