Primeiro, precisamos de criar um lugar para armazenar todas as nossas bolas e então preenche-lo. O código a seguir fará esse trabalho — adicione-o ao final do seu código agora:
+ let balls = [];
+
+while (balls.length < 25) {
+ let size = random(10,20);
+ let ball = new Ball(
+ // ball position always drawn at least one ball width
+ // away from the edge of the canvas, to avoid drawing errors
+ random(0 + size,width - size),
+ random(0 + size,height - size),
+ random(-7,7),
+ random(-7,7),
+ 'rgb(' + random(0,255) + ',' + random(0,255) + ',' + random(0,255) +')',
+ size
+ );
+
+ balls.push(ball);
+}
- Todos os programas que animam as coisas geralmente envolvem um loop de animação, que serve para atualizar as informações no programa e renderizar a visualização resultante em cada quadro da animação; esta é a base para a maioria dos jogos e outros programas.
+ O laço while
cria uma nova instância da nossa Ball()
usando valores aleatórios gerados com nossa função random()
, então a função push()
coloca ela no final do nosso array de bolas, mas somente enquanto o número de bolas no array é menor que 25. Então quando nos tivermos 25 bolas na tela mais nenhuma bola aparece. Você pode tentar variar o número em balls.length < 25
para obter mais ou menos bolas na tela. Dependendo de quanto poder de processamento seu computador/navegador tiver, especificar várias milhares de bolas pode diminuir bastante a velocidade da animação!
Adicione o seguinte ao final do seu código agora:
function loop() {
ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';
ctx.fillRect(0, 0, width, height);
- while (balls.length < 25) {
- let size = random(10,20);
- let ball = new Ball(
- // ball position always drawn at least one ball width
- // away from the edge of the canvas, to avoid drawing errors
- random(0 + size,width - size),
- random(0 + size,height - size),
- random(-7,7),
- random(-7,7),
- 'rgb(' + random(0,255) + ',' + random(0,255) + ',' + random(0,255) +')',
- size
- );
- balls.push(ball);
- }
-
for (let i = 0; i < balls.length; i++) {
balls[i].draw();
balls[i].update();
@@ -213,12 +214,11 @@ testBall.draw()
requestAnimationFrame(loop);
}
- Nossa função loop()
faz o seguinte:
+ Todos os programas que animam as coisas geralmente envolvem um loop de animação, que serve para atualizar as informações no programa e renderizar a visualização resultante em cada quadro da animação; esta é a base para a maioria dos jogos e outros programas. Nossa função loop()
faz o seguinte:
- Define a cor de preenchimento da tela como preto semitransparente e desenha um retângulo com a cor em toda a largura e altura da tela, usando
fillRect()
(os quatro parâmetros fornecem uma coordenada de início e uma largura e altura para o retângulo desenhado ). Isso serve para encobrir o desenho do quadro anterior antes que o próximo seja desenhado. Se você não fizer isso, você verá apenas longas cobras se movimentando ao redor da tela, em vez de mover as bolas! A cor do preenchimento é definida como semitransparente, rgba(0,0,0,0.25)
, para permitir que os poucos quadros anteriores brilhem levemente, produzindo as pequenas trilhas atrás das bolas à medida que elas se movem. Se você mudou 0,25 para 1, você não vai mais vê-los. Tente variar esse número para ver o efeito que ele tem.
- - Cria uma nova instância de nossa
Ball()
usando valores aleatórios gerados com a nossa função random()
então push()
para o final de nosso array de bolas, mas somente enquanto o número de bolas no array é menor que 25. Então quando temos 25 bolas na tela, não aparecem mais bolas. Você pode tentar variar o número emballs.length < 25
para obter mais ou menos bolas na tela. Dependendo de quanto poder de processamento seu computador / navegador possui, especificar vários milhares de bolas pode retardar bastante a animação!
- - Faz um loop em todas as
balls
no array de bolas e executa a função draw()
e update()
de cada bola para desenhar cada uma delas na tela, depois faz as atualizações necessárias para a posição e a velocidade no tempo para o próximo quadro.
+ - Percorre todas as bolas no array
balls
e executa a função draw()
e update()
de cada bola para desenhar cada uma delas na tela, depois faz as atualizações necessárias para a posição e a velocidade a tempo para o próximo quadro.
- Executa a função novamente usando o método
requestAnimationFrame()
— quando esse método é executado constantemente e passa o mesmo nome de função, ele executará essa função um número definido de vezes por segundo para criar uma animação suave. Isso geralmente é feito de forma recursiva — o que significa que a função está chamando a si mesma toda vez que é executada, portanto, ela será executada repetidas vezes.
--
cgit v1.2.3-54-g00ecf