1
resposta

Não pude baixar o arquivo, e agora?

Primeiro, não pude baixar o arquivo, por isso optei por usar a primeira função ensinada. Tentei usar a função que colide com minha raquete para raquete do oponente, e substitui os valores correspondentes ao x e y da raquete do oponente, porem não obtive sucesso. Minha dúvida é, por que a mesma formula não pode funcionar para colisão em ambas raquetes? Tenho outras alternativas para fazer com que a bola colida com a raquete do oponente?

let xCircle = 300; let yCircle = 200; let diametro = 15; let raio = diametro / 2;

let xRect = 5; let yRect = 150; let largura = 10; let altura = 100

let xRectOponente = 585; let yRectOponente = 150; let velocidadeYoponente;

let velocidadeXcircle = 6; let velocidadeYcircle = 6;

function setup() { createCanvas(600, 400); }

function draw() { background(0); motraCircle(); motraRect(xRect, yRect); motraRect(xRectOponente, yRectOponente); movimentaCircle(); movientaRect(); colisao(); colisaoRect(); movimentaRectOponente(); colisaoRectOponente();

}

function motraCircle() { circle(xCircle, yCircle, diametro); }

function motraRect(x,y) { rect(x, y, largura, altura); }

function movimentaCircle() { xCircle += velocidadeXcircle; yCircle += velocidadeYcircle; }

function movientaRect() {

if(keyIsDown(87)) { yRect -= 10; } if(keyIsDown(83)) { yRect += 10; } }

function movimentaRectOponente() {

if(keyIsDown(UP_ARROW)) { yRectOponente -= 10; } if(keyIsDown(DOWN_ARROW)) { yRectOponente += 10; }

}

function colisao() {

if(xCircle > width || xCircle < 0) { velocidadeXcircle *= -1; }

if(yCircle > height || yCircle < 0) { velocidadeYcircle *= -1;} }

**function colisaoRect() {

if(xCircle - raio < xRect + largura && yCircle - raio < yRect + altura && yCircle + raio > yRect) {

velocidadeXcircle *= -1;

}

}

#

function colisaoRectOponente() {

if(xCircle - raio < xRectOponente + largura && yCircle - raio < yRectOponente + altura && yCircle + raio > yRectOponente) {

velocidadeXcircle *= -1;

}

}**

1 resposta

Olá, Thiago, o colega Khayo B. Lima, fez as colisões sem utilizar biblioteca assim:

function verificaColisaoRaquete(){
  if(xBolinha < xRaquete + raqueteComprimento 
     && yBolinha - raio < 
       yRaquete + raqueteAltura
         && yBolinha + raio > yRaquete){

    velocidadeXBolinha *= -1;
  }
}

function verificaColisaoRaqueteOponente(){
  if (xBolinha + raio > xRaqueteOponente && yBolinha + raio < yRaqueteOponente + raqueteAltura && yBolinha + raio > yRaquete) {
    velocidadeXBolinha *= -1;
  }
}

Não esqueça de verificar se as suas variáveis têm o mesmo nome (inclusive as letras minúsculas e maiúsculas) ou se será necessário ajustar.

Link para o tópico do Khayo, com o código completo:

https://cursos.alura.com.br/forum/topico-bolinha-nao-tem-colisao-sem-biblioteca-202224

Espero ter ajudado. Bons estudos!