Recentemente, tenho prestado atenção às informações do blockchain, vagando por aí e acidentalmente vi o efeito da página inicial deste site. É um monte de bolas flutuantes. Quando a bola estiver próxima, haverá uma linha de detecção conectada a ela. O mouse também pode criar uma linha de detecção com a bola. Olhe O seguinte é feito usando tela.
Efeito original
alcançar efeito
Já tive muito contato com SVG antes e sei que o canvas também pode obter efeitos de renderização muito poderosos, mas nunca houve nenhum cenário de uso que me desse a chance de começar, então desta vez pretendo tentar sozinho. .
Além disso, estou interessado nisso porque um é que gosto de efeitos visuais e o outro é que gosto da sensação de simular o mundo físico como um motor de jogo. Imagine que essas bolas vão colidir umas com as outras. , ou ter repulsão gravitacional entre si, ou aumentar o fator de gravidade. Essa animação também pode abrir muita imaginação.
Veja o repositório do github aqui.
TelaAs instruções de desenho do Canvas são muito semelhantes às instruções do SVG, muito simples.
desenhe um círculoctx.beginPath();ctx.arc(this.center.x, this.center.y, this.radius, 0, 2 * Math.PI);ctx.fill();
BeginPath inicia um caminho, arc desenha um círculo e o preenche com cor.
desenhar linhactx.beginPath();ctx.moveTo(from.x, from.y);ctx.lineTo(to.x, to.y);ctx.stroke();
Da mesma forma, BeginPath inicia um caminho, moveTo move o pincel para o ponto inicial, lineTo desenha a linha até o ponto final e traça os traços.
Tela cheiaPara manter a tela em tela cheia, basta redefinir a largura e a altura da tela quando a janela for carregada ou redimensionada.
var canvas = document.getElementById(canvas); function resizeCanvas() { canvas.width = window.innerWidth;animação
Animações básicas me ajudam a começar.
Etapas básicasQuatro etapas para criar animação:
O que fiz foi relativamente simples, usando apenas 1 e 3, que é limpar constantemente a tela e depois redesenhá-la.
window.onload = function () { resizeCanvas(); window.requestAnimationFrame(draw);};function cleanCanvas() { ctx.clearRect(0, 0, canvas.width, canvas.height);}function draw() { cleanCanvas (); //desenha coisas.window.requestAnimationFrame(draw);}função de controle
Três estão disponíveis:
Este exemplo no MDN é muito legal. Ele pode ser movido e o seguinte é apenas uma captura de tela.
estrutura de dadosJá vi algum desenvolvimento de mecanismo de jogo antes e fiz encapsulamento orientado a objetos conscientemente. O que é usado aqui é muito simples.
O mais básico é que Vector representa um ponto/vetor em um espaço bidimensional, e seus membros são apenas x e y.
Com base nisso, Círculo representa um círculo, membro centro: Vetor representa o centro do círculo, raio: número representa o raio e velocidade: Vetor representa a velocidade.
Em seguida, basta encapsular algumas funções-membro para seu próprio uso.
ambiente de desenvolvimentoTypeScript + Webpack + Webpack-dev-server não é complicado, basta consultar o seguinte conteúdo:
Além disso, também tentei o npx, que é usado para executar programas executáveis npm. No passado, o webpack era instalado globalmente e você poderia simplesmente chamar o webpack xx diretamente. Se você instalar o webpack localmente, precisará acessar ./node_modules/. .bin/webpack Para executar o webpack local, agora você pode npx webpack xxx.
um pequeno poçoNa configuração do devServer, adicionei hot: true para ativar a atualização a quente. Como resultado, a página da web solicitou: [HMR] Hot Module Replacement está desabilitado.
Achei que era uma armadilha antiga. Quando precisar chamá-lo, adicione os parâmetros da linha de comando: webpack-dev-server --hot --inline.
O texto acima é todo o conteúdo deste artigo. Espero que seja útil para o estudo de todos. Também espero que todos apoiem a Rede VeVb Wulin.