La gestione dell'#Input dell'utente nei #Videogiochi è una questione molto delicata.
Se si sbaglia approccio, si rischia di degradare le prestazioni dell'intera applicazione.

Supponiamo - quindi - di dover gestire l'input della tastiera...
La prima cosa che verrebbe naturale fare, sarebbe controllare se i tasti risultino premuti durante il classico `update` del #GameLoop
Probabilmente con una catena di `if` "infinita" che verrebbero testati ad ogni aggiornamento di frame.

#BDDGZProject

E quindi...
• Come è possibile ottimizzare questo tipo di gestione? 🤔

Tutto è partito da una semplice domanda che mi sono posto:
«Ma sono davvero obbligato a testare e controllare questi valori a ogni singolo ciclo?».
La risposta a cui - dopo varie elucubrazioni - sono arrivato è stata: "No."!

---

Ma allora...
• Quando devo controllare questi valori? 🤔

In maniera molto banale: quando cambiano! 😌

Immaginiamo - quindi - una #FSM (ovvero una Macchina a Stati Finiti: https://it.wikipedia.org/wiki/Automa_a_stati_finiti) con cui rappresentiamo lo stato della tastiera: ogni volta che un pulsante viene premuto o rilasciato, la macchina cambia di stato.

Se - a questo punto - a ogni stato associassimo una funzione, nel ciclo di update non dovremmo far altro che chiamare la funzione in quel momento attiva.

Nessun controllo da eseguire; una pura e semplice callback.
Ci guadagnano le prestazioni ma anche il nostro codice! 😉

Tutti coloro che hanno già dovuto (o voluto) affrontare questo problema in passato e si son fatti un buon bagaglio a riguardo, probabilmente avranno già notato qualcosa che non torna nello screenshot precedente.

È vero: è così.

Il fatto è che ho voluto portare un caso più semplice, gestito con un'API semplificata rispetto quella della mia reale implementazione.

Nella realtà dei fatti, le cose sono (e sono state) "leggermente" più complesse e mi han portato via un'immensità di tempo... 🥲