tutoriais mais recente desenvolvimento web
 

HTML rotação do jogo


O quadrado vermelho pode girar:


Componentes rotativos

Anteriormente, neste tutorial, o quadrado vermelho foi capaz de se mover no gamearea, mas não podia virar ou girar.

Para girar componentes, temos de mudar a nossa forma de desenhar componentes.

O único método de rotação disponível para o elemento canvas irá girar a tela inteira:

Tudo o resto que você desenhar na tela, também será rodado, não só a componente específico.

É por isso que nós temos que fazer algumas mudanças no update() método:

Em primeiro lugar, vamos salvar o objeto de contexto lona atual:

ctx.save();

Em seguida, passamos toda a tela para o centro do componente específico, usando o método de traduzir:

ctx.translate(x, y);

Em seguida, executar a rotação desejada usando o rotate() método:

ctx.rotate( angle );

Agora estamos prontos para desenhar o componente para a tela, mas agora vamos desenhá-lo com a sua posição central na posição 0,0 no traduzida (and rotated) tela:

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

Quando terminar, temos de restaurar o objeto de contexto de volta à sua posição salvo, usando o método de restauração:

ctx.restore();

O componente é a única coisa que é girado:


O Construtor de componentes

O component do construtor tem uma nova propriedade é chamado angle , que é o número radiano que representa o ângulo do componente.

A update método da component construtor é onde tiramos o componente, e aqui você pode ver as mudanças que permitirão que o componente para rodar:

Exemplo

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();
}
Tente você mesmo "