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!