1
resposta

Exercício Raquete esquerda da tela completado

//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 15; let raio = diametro/2;

//velocidade da bolinha let velocidadeXBolinha = 6 let velocidadeYBolinha = 6 let raqueteComprimento = 10 let raqueteAltura = 90

//variáveis da raquete let xRaquete = 5 let yRaquete = 150

let colidiu = false;

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

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(); movimentaMinhaRaquete(); verificaColisaoRaquete(); colisaoMinhaRaqueteBiblioteca(); }

function mostraBolinha(){ circle(xBolinha,yBolinha,diametro); }

function movimentaBolinha(){ xBolinha += velocidadeXBolinha; //yBolinha += velocidadeYBolinha; }

function verificaColisaoBorda(){ if( xBolinha + raio > width || xBolinha < 0){ velocidadeXBolinha *= -1; } if(yBolinha + raio > height || yBolinha< 0){ velocidadeYBolinha *= -1; } }

function mostraRaquete(){ rect(xRaquete,yRaquete,raqueteComprimento,raqueteAltura); }

function movimentaMinhaRaquete(){ if (keyIsDown(UP_ARROW)){ yRaquete -= 10; } if (keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){ velocidadeXBolinha *= -1; } }

function colisaoMinhaRaqueteBiblioteca(){ colidiu = collideRectCircle(xRaquete, yRaquete, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeXBolinha *= -1; } }

1 resposta

Oi, João! Tudo bem?

Desculpa a demora por um retorno!

Conferi o seu código, muito bom! Parabéns pelo desempenho! Porém tenho algumas observações sobre ele:

Para evitar problemas e facilitar a leitura e alteração do código por outras pessoas é recomendado que escrevamos a declaração de cada variável em linhas diferentes/ separadas, no caso do seu código, podemos notar que ao colocá-lo no p5 o editor lê toda a linha como um comentário, não lendo então as variáveis declaradas. Além de termos atenção ao colocar um ponto e vírgula (;) ao final da declaração de cada uma, o que não identifiquei no seu código na declaração das variáveis da velocidade da bolinha e da raquete.

Somado a isso, como estamos usando uma biblioteca para executar a função de verificar a colisão da raquete, devemos deixar a chamada da função verificaColisaoRaquete() em draw() comentada.

É necessário também que se adicione na condicional dentro dos ifs da função verificaColisaoBorda() a diminuição do raio das coordenadas xBolinha e yBolinha, dessa forma:

function verificaColisaoBorda() {
    if (xBolinha + raio > width || xBolinha - raio < 0) {
        velocidadeXBolinha *= -1;
    }
    if (yBolinha + raio > height || yBolinha - raio < 0) {
        velocidadeYBolinha *= -1;
    }
}

Segue abaixo o código revisado com as alterações citadas acima:

//variáveis da bolinha 
let xBolinha = 300; 
let yBolinha = 200; 
let diametro = 15; 
let raio = diametro/2;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6 ;

//variáveis da raquete 
let xRaquete = 5 ;
let yRaquete = 150;
let raqueteComprimento = 10 ;
let raqueteAltura = 90;

let colidiu = false;

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

function draw() {
  background(0); 
  mostraBolinha(); 
  movimentaBolinha(); 
  verificaColisaoBorda(); 
  mostraRaquete(); 
  movimentaMinhaRaquete(); 
  //verificaColisaoRaquete(); 
  colisaoMinhaRaqueteBiblioteca(); 
}

function mostraBolinha(){
  circle(xBolinha,yBolinha,diametro); 
}

function movimentaBolinha(){
  xBolinha += velocidadeXBolinha; 
  yBolinha += velocidadeYBolinha;
}

function verificaColisaoBorda(){ 
  if( xBolinha + raio > width || xBolinha - raio < 0){ 
    velocidadeXBolinha *= -1; 
  } 
  if(yBolinha + raio > height || yBolinha - raio < 0){ 
    velocidadeYBolinha *= -1; 
  } 
}

function mostraRaquete(){ rect(xRaquete,yRaquete,raqueteComprimento,raqueteAltura); 
    }

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10; 
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  } 
}

function verificaColisaoRaquete(){ 
  if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){ velocidadeXBolinha *= -1;                                                   } 
}

function colisaoMinhaRaqueteBiblioteca(){ 
  colidiu = 
    collideRectCircle(xRaquete, yRaquete, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); 
  if (colidiu){ 
    velocidadeXBolinha *= -1; 
  } 
}

Espero ter ajudado! Qualquer dúvida estarei a sua disposição!

Um forte abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software