Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mais de uma bola com velocidades diferentes

Olá!

Eu tentei testar a possibilide de colocar 3 bolas em eixos y diferentes e com velocidades diferentes, se eu conseguisse fazer isso, depois tentaria fazer os milissegundos serem um número aleatório, mas não consegui nem a primeira parte. Eu fiz a função só com a bola azul e funciona. A partir do momento que coloco os 3 "setInterval" no fim, chamando cada função das bolas, parece que os intervalos se misturam e não sai nada como cada função declara. Como posso corrigir isso? Como fazer pra cada bola ter seu intervalo sem interferir o intervalo da outra?

Segue código:

<canvas id="tela" width="600" height="400"></canvas>

<script>

var tela = document.getElementById("tela");
var c = tela.getContext("2d");

//bola azul
function circulo(x,y,raio) {
    c.fillStyle = "blue";
    c.beginPath();
    c.arc(x,y,raio, 0, 2*Math.PI);
    c.fill();
}
function limpaTela() {
    c.clearRect(0,0,600,400);
}
var x = 1
function desenha() {
    limpaTela();
    circulo(x,100,10);
    x = x + 1
}

//bola verde
function circulo2(x,y,raio) {
    c.fillStyle = "green";
    c.beginPath();
    c.arc(x,y,raio, 0, 2*Math.PI);
    c.fill();
}
function limpaTela() {
    c.clearRect(0,0,600,400);
}
var x = 1
function desenha2() {
    limpaTela();
    circulo2(x,200,10);
    x = x + 1
}

//bola vermelha
function circulo3(x,y,raio) {
    c.fillStyle = "red";
    c.beginPath();
    c.arc(x,y,raio, 0, 2*Math.PI);
    c.fill();
}
function limpaTela() {
    c.clearRect(0,0,600,400);
}
var x = 1
function desenha3() {
    limpaTela();
    circulo3(x,300,10);
    x = x + 1
}    

setInterval(desenha, 30);
setInterval(desenha2, 20);
setInterval(desenha3, 10);

</script>

Obrigado!

2 respostas
solução!

O código pode ser mais reduzido.

Experimente isto:

<canvas id="tela" width="600" height="400"></canvas>

<script>

var tela = document.getElementById("tela");
var c = tela.getContext("2d");
var d = tela.getContext("2d");
var e = tela.getContext("2d");
var x = 1

function desenha() {
    limpaTela()
    circulo(c, x,100,10, "red");
    circulo(d, x*2,200,30, "blue");
    circulo(e, x*3,300,40, "green");
    x = x + 1
}

function limpaTela() {
    c.clearRect(0,0,600,400);
}

function circulo(tela,x,y,raio, cor) {
    tela.fillStyle = cor;
    tela.beginPath();
    tela.arc(x,y,raio, 0, 2*Math.PI);
    tela.fill();
}

setInterval(desenha, 10);

</script>

Obrigado!