Oppure

Loading
09/03/11 0:34
Giarados
Ciao!

Avendo sino ad ora passato giornate per risolvere problemi banali come "perchè non stampa a video questa SDL_Surface ?!" o "perchè non si sente l'audio?!" ho finalmente deciso prima di iniziare un nuovo progetto di realizzare un engine banale ma che offra delle interfacce per la gestione di video, grafica, audio, tastiera e mouse in modo tale da potermi concentrare maggiormente sulla parte che (almeno per me) è la più divertente. Al contempo renderei molto più semplice da portare su altre piattaforme i progetti realizzati.

Ho già finito le interfacce per la gestione delle superfici e dello schermo. Ho iniziato a buttare giù un po' di righe per la tastiera.

Incontro un problema concettuale: qual'è il miglior modo per gestire la tastiera?

Quel che so di certo è che la gestione degli eventi da tastiera fornita da SDL non mi piace proprio. Ho trovato molto carina l'idea di un array di 256 bool in cui true viene settato quando il tasto è premuto e false quando viene rilasciato.

Voi che dite?

Edit:
@Pitagora: ciò che non mi piace di SDL è il fatto che bisogna gestire "manualmente" l'input.

Insomma, funziona più o meno come:

Se un evento E accade --> dii all'oggetto X di fare Y

Invece a me piacerebbe fosse l'oggetto X a captare l'evento E:

E sta accadendo? --> faccio Y

Così potrei evitare di volta in volta di andare a scrivere delle funzioni per la gestione dell'input trattandolo globalmente.

Altra soluzione che mi è venuta in mente è di fare ereditare tutte le classi da:
Class class
{
	virtual void manageInput(Input );
};
Ultima modifica effettuata da Giarados 09/03/11 11:34
aaa
09/03/11 6:32
Pitagora
Perchè non usi la gestione dei tasti di SDL? Son tanto carini. Cosa è che non ti piace? La tua idea potrebbe anche andare bene ma ti devi creare tutte le possibili varianti: se stato premuto 'a' setta tue...
aaa
09/03/11 12:26
carlduke
Puoi creare una classe keyboard che lavori in automatico, magari con un thread o richiamando la funzione ciclicamente, e che al suo interno memorizzi l'array di bool per sapere quale tasto è stato premuto.
Ovviamente o rendi l'istanza della classe che crei globale, oppure in un namespace puoi fare cosi :

 namespace <name>{
    
    . . .
    
    KeyboardDevice *currentKeyboard;
 }


che poi inizializzi o nel costruttore della classe, o nel main del programma.

Puoi fare la stessa cosa anche per il mouse

namespace CurrentDevices{
     MouseDevice *currentMouse;
     KeyboardDevice *currentKeyboard;
} 


e dalle classe varie che hanno il metodo manageInput() basta fare
void classe::manageInput(){
  if(CurrentDevices::currentKeyboard->key['a']){
     . . .
  }
  
  if(CurrentDevices::currentMouse->leftBottonClicked){
    . . . 
  }
}
aaa