Ci sono due nuovi commit oggi. Tralascio il primo che tratta solo di refactoring e ottimizzazione, e mi concentro sul secondo che, come accennato, introduce il: Player movement!
Ho creato una classe Player il cui scopo è quello di gestire tutto ciò che riguarda il personaggio principale.
class Player {
void update( const float delta, const gfx::Input& input );
float speed = 32.0f;
Handle<gfx::Node> node;
};
Il personaggio ha una velocità di movimento regolabile a piacere, il nodo ovvero la sua rappresentazione grafica utile al disegno su schermo tramite gfxspot, e una funzione update per l'aggiornamento dello stato interno.
void Player::update( const float delta, const gfx::Input& input ) {
math::Vec2 move;
move.y += input.key.w;
move.x -= input.key.a;
move.y -= input.key.s;
move.x += input.key.d;
if ( move != math::Vec2::Zero ) {
move.normalize();
move *= delta * speed;
node->translate( move );
}
}
Nell'implementazione del movimento da tastiera (WASD) è importante evitare determinati errori.
Se non normalizzassi il vettore move, otterrei una velocità maggiore quando il personaggio si muove in diagonale. La normalizzazione mi garantisce che questa velocità di movimento resti uniforme in tutte le direzioni.
Ancora più importante è la moltiplicazione con delta, ovvero il lasso di tempo che intercorre tra un frame e l'altro. Senza questa componente, la velocità di movimento non sarebbe uniforme nel tempo, così come il tempo che passa tra un frame e l'altro puó variare imprevedibilmente.
Per saperne di più sull'argomento delta time, posso consigliare questo articolo.
Intanto, ecco a voi il risultato di oggi!