Rotazione del gioco
Il quadrato rosso può ruotare:
Componenti rotanti
In precedenza in questo tutorial, il quadrato rosso poteva muoversi nell'area di gioco, ma non poteva girare o ruotare.
Per ruotare i componenti, dobbiamo cambiare il modo in cui disegniamo i componenti.
L'unico metodo di rotazione disponibile per l'elemento canvas ruoterà l'intero canvas:
Anche tutto il resto che disegni sulla tela verrà ruotato, non solo il componente specifico.
Ecco perché dobbiamo apportare alcune modifiche al update()
metodo:
Innanzitutto, salviamo l'oggetto contestuale canvas corrente:
ctx.save();
Quindi spostiamo l'intera tela al centro del componente specifico, usando il metodo translate:
ctx.translate(x, y);
Quindi eseguiamo la rotazione desiderata usando il metodo rotate():
ctx.rotate(angle);
Ora siamo pronti per disegnare il componente sulla tela, ma ora lo disegneremo con la sua posizione centrale in posizione 0,0 sulla tela traslata (e ruotata):
ctx.fillRect(width / -2, height / -2, width, height);
Al termine, dobbiamo ripristinare l'oggetto contesto nella sua posizione salvata, utilizzando il metodo di ripristino:
ctx.restore();
Il componente è l'unica cosa che viene ruotata:
Il costruttore di componenti
Il component
costruttore ha una nuova proprietà chiamata angle
, che è un numero in radianti che rappresenta l'angolo del componente.
Il update
metodo del component
costruttore è dove disegniamo il componente, e qui puoi vedere le modifiche che consentiranno al componente di ruotare:
Esempio
function component(width, height, color, x, y) {
this.width = width;
this.height = height;
this.angle = 0;
this.x = x;
this.y = y;
this.update = function() {
ctx = myGameArea.context;
ctx.save();
ctx.translate(this.x, this.y);
ctx.rotate(this.angle);
ctx.fillStyle = color;
ctx.fillRect(this.width / -2, this.height / -2, this.width, this.height);
ctx.restore();
}
}
function updateGameArea() {
myGameArea.clear();
myGamePiece.angle += 1 * Math.PI / 180;
myGamePiece.update();
}