• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
chiarimento sul c++
#2
Gli enum sono una serie di costanti (definite manualmente o automaticamente) raggruppate in un tipo (definito da te). Un esempio pratico di enum è la gestione dei tasti in una libreria che gestisce l'input asincrono (per i videogiochi, ad esempio). Ti faccio proprio un esempio pratico di come si utilizza la libreria OIS:

Codice:
if(pKeyboard->isKeyDown(OIS::KC_ESCAPE)) // OIS è un enum, KC_ESCAPE è una costante enumerativa
{
// è stato premuto esc
}
In questo modo, per verificare se è stato premuto un tasto, non devi ricordarti il numero a cui corrisponde.

Un altro esempio potrebbe essere la gestione di un personaggio in un platform:
Codice:
enum statoPersonaggio
{
VAI_AVANTI,
VAI_INDIETRO,
SALTA,
SPARA
};

bool controllaTasti(/*...*/)
{
statoPersonaggio statoAttuale; //variabile di tipo stato, che può assumero solo i valori nell'enum stato
if(/* è stato premuto lo spazio */)
{
statoAttuale = statoPersonaggio::SALTA;
}

if(/* è stato premuto la freccia destra */)
{
statoAttuale = statoPersonaggio::VAI_AVANTI;
}

// ecc....

controllaPG(statoAttuale); // può assumere solo i valori dell'enum "stato"
}

void controllaPG(statoPersonaggio s)
{
if(s == statoPersonaggio::VAI_AVANTI)
{
// codice che mi muove in avanti il personaggio
}

//ecc...

}


Come puoi capire, se al posto dell'enum avessi usato delle costanti non sarebbe cambiato niente, ad esempio:
Codice:
bool keyPressed(const OIS::KeyEvent &keyEventRef)
{
int statoAttuale;
if(m_pKeyboard->isKeyDown(OIS::KC_SPACE))
{
statoAttuale = 1; // mi ricordo che 1 corrisponde a "salta"
}

if(m_pKeyboard->isKeyDown(OIS::KC_W))
{
statoAttuale =2; // mi ricordo che 2 corrispone a "vai avanti"
}
...
controllaPG(statoAttuale);
}

void controllaPG(int s)
{
if(s == 1) // 1 corrispondeva a "salta"
{
// codice che mi fa saltare il personaggio
}
...
}

Tuttavia usare i "magic numbers" (numeri che hanno implicitamente un altro significato) è male: oggi ti ricordi che 1 significa "salta", ma tra un mese te lo sarai dimenticato.


EDIT:
Mi rendo conto di essermi spiegato un po' alla caxxo, se continui a non capire avvisa che cerco un esempio migliore.
 
Rispondi
  


Messaggi in questa discussione
chiarimento sul c++ - da SuperMario64 - 27-05-2012, 01:59 PM
RE: chiarimento sul c++ - da steve - 27-05-2012, 07:04 PM
RE: chiarimento sul c++ - da SuperMario64 - 27-05-2012, 07:18 PM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Inizio nuova serie di tutorial sul C Blackg96 4 1,554 05-06-2014, 10:29 AM
Ultimo messaggio: Blackg96

Vai al forum:


Browsing: 2 Ospite(i)