Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Miglior metodo per la gestione degli eventi da tastiera
Forum - C/C++ - Miglior metodo per la gestione degli eventi da tastiera

Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Segnala al moderatore
Postato alle 1:34
Mercoledì, 09/03/2011
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:
Codice sorgente - presumibilmente C++

  1. Class class
  2. {
  3.         virtual void manageInput(Input );
  4. };


Ultima modifica effettuata da Giarados il 09/03/2011 alle 12:34
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 7:32
Mercoledì, 09/03/2011
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...

PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 13:26
Mercoledì, 09/03/2011
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 :

Codice sorgente - presumibilmente C/C++

  1. namespace <name>{
  2.    
  3.     . . .
  4.    
  5.     KeyboardDevice *currentKeyboard;
  6.  }



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

Puoi fare la stessa cosa anche per il mouse

Codice sorgente - presumibilmente C/C++

  1. namespace CurrentDevices{
  2.      MouseDevice *currentMouse;
  3.      KeyboardDevice *currentKeyboard;
  4. }



e dalle classe varie che hanno il metodo manageInput() basta fare
Codice sorgente - presumibilmente C/C++

  1. void classe::manageInput(){
  2.   if(CurrentDevices::currentKeyboard->key['a']){
  3.      . . .
  4.   }
  5.  
  6.   if(CurrentDevices::currentMouse->leftBottonClicked){
  7.     . . .
  8.   }
  9. }


PM