Ultimele tutoriale de dezvoltare web
 

HTML joc Rotație


Pătratul roșu poate roti:


Componente rotitoare

Mai devreme în acest tutorial, pătrat roșu a fost capabil să se deplaseze în jurul valorii de pe gamearea, dar nu a putut transforma sau roti.

Pentru a roti componente, trebuie să ne schimbăm modul în care ne trage componente.

Singura metodă de rotație disponibilă pentru elementul canvas se va roti întreaga panza:

Orice altceva ai desena pe panza va fi, de asemenea rotită, nu numai componenta specifică.

De aceea , trebuie să facem unele schimbări în update() metoda:

În primul rând, vom salva obiectul curent context panza:

ctx. save() ;

Apoi vom muta întreaga panza la centrul componentei specifice, folosind metoda TRANSLATE:

ctx. translate(x, y) ;

Apoi vom efectua rotația dorită folosind rotate() metoda:

ctx. rotate( angle ) ;

Acum suntem gata să atragă componenta pe pânză, dar acum vom trage cu ea de poziție centrală la poziția 0,0 pe tradus (and rotated) pânză:

ctx. fillRect(width / -2, height / -2, width, height) ;

Când am terminat, trebuie să restabilim obiectul context înapoi în poziția sa salvat, folosind metoda restore:

ctx. restore() ;

Componenta este singurul lucru care este rotit:


Componenta Constructor

component Constructorul are un nou propery numit angle , care este numărul radian care reprezintă unghiul componentei.

update Metoda a component constructorului este rămăsesem trage componenta, și aici puteți vedea modificările care vor permite componentei să se rotească:

Exemplu

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();
}
Încearcă - l singur »