Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não consigo fazer a minha bolinha colidir com a bola do oponente.

Boa Noite! Fiz tudo o que o professor ensinou, porém quando cheguei na etapa em que ele aplica essa função function colisaoMinharosaRacketBiblioteca() { colidiu = collideRectCircle (xrosaRacket, yrosaRacket, widthRacket, heightRacket, xcircle, ycircle,raio); if (Colidiu) { VelocidadeXcircle *= -1; } }

é de se esperar que a bolinha (circle) colide com a minha raquete oponente (rosaRacket), mas isso não aconteceu.

Vou deixar aqui os códigos do meu jogo.

//variáveis da circle let xcircle = 100; let ycircle = 50; let diametro = 22; let raio = diametro / 2;

//variáveis da velocidade da circle let VelocidadeXcircle = 6; let VelocidadeYcircle = 6; let widthRacket = 13; let heightRacket = 100;

//variável da redRacket let xredRacket = 6; let yredRacket = 300;

//variável da rosaRacket (oponente) let xrosaRacket = 920; let yrosaRacket = 300; let VelocidadeYRosaRacket;

let Colidiu = false

function setup() { createCanvas(940, 700); }

function draw() { background(0); circulo(); rapidez(); bordaDaPreview(); mostraRaquete(xredRacket,yredRacket); movimentoRaqueteVermelha(); VerificaColisaoRaquete(); colisaoMinhaRaqueteBiblioteca(); mostraRaquete(xrosaRacket,yrosaRacket); movimentarosaRacket(); colisaoMinharosaRacketBiblioteca();

}

function circulo() { circle (xcircle,ycircle,diametro); }

function rapidez() { xcircle += VelocidadeXcircle; ycircle += VelocidadeYcircle; }

function bordaDaPreview() { if (xcircle + raio > width || xcircle - raio < 0){ VelocidadeXcircle *= -1; } if (ycircle + raio > height || ycircle - raio < 0){ VelocidadeYcircle *= -1; } }

function mostraRaquete(x,y){ rect (x,y,widthRacket,heightRacket); }

function movimentoRaqueteVermelha(){ if (keyIsDown(UP_ARROW)){ yredRacket -= 10; } if (keyIsDown(DOWN_ARROW)){ yredRacket += 10; } }

function VerificaColisaoRaquete(){ if (xcircle - raio < xredRacket + widthRacket && ycircle - raio < yredRacket + heightRacket && ycircle + raio > yredRacket) { VelocidadeXcircle *= -1 } }

function colisaoMinhaRaqueteBiblioteca() { colidiu = collideRectCircle (xredRacket, yredRacket, widthRacket, heightRacket, xcircle, ycircle,raio); if (Colidiu) { VelocidadeXcircle *= -1; } }

function colisaoMinharosaRacketBiblioteca() { colidiu = collideRectCircle (xrosaRacket, yrosaRacket, widthRacket, heightRacket, xcircle, ycircle,raio); if (Colidiu) { VelocidadeXcircle *= -1; } }

function movimentarosaRacket(){ VelocidadeYRosaRacket = ycircle - yrosaRacket - widthRacket / 2 -30; yrosaRacket += VelocidadeYRosaRacket

}

1 resposta
solução!

Olá, Maria, tudo bem?

Obrigada por você aguardar a resposta.

Editei seu post e deixei o código aparente para ficar de uma forma mais legível e assim ajudar outros alunos também.

Analisei o seu código e notei que ao criar a variável “colidiu”, você utilizou a notação com letra minuscula, e na condição ao verificar se é verdadeira, ela está maiúscula. O programa, portanto, não chega a executar a verificação, pois considera como duas variáveis distintas. A verificação na função colisaoMinhaRaqueteBiblioteca(), também não estava sendo executada. A colisão da minha raquete estava ocorrendo, pois na função draw() você chama a função VerificaColisaoRaquete().

Segue o código com as devidas alterações:

//variáveis da circle
let xcircle = 100;
let ycircle = 50;
let diametro = 22;
let raio = diametro / 2;

//variáveis da velocidade da circle
let VelocidadeXcircle = 6;
let VelocidadeYcircle = 6;
let widthRacket = 13;
let heightRacket = 100;

//variável da redRacket
let xredRacket = 6;
let yredRacket = 300;

//variável da rosaRacket (oponente)
let xrosaRacket = 920;
let yrosaRacket = 300;
let VelocidadeYRosaRacket;

let Colidiu = false

function setup() {
  createCanvas(940, 700);
}

function draw() {
  background(0);
  circulo();
  rapidez();
  bordaDaPreview();
  mostraRaquete(xredRacket,yredRacket);
  movimentoRaqueteVermelha();
  VerificaColisaoRaquete();
  colisaoMinhaRaqueteBiblioteca();
  mostraRaquete(xrosaRacket,yrosaRacket);
  movimentarosaRacket();
  colisaoMinharosaRacketBiblioteca();

}

function circulo() {
  circle (xcircle,ycircle,diametro);
}

function rapidez() {
  xcircle += VelocidadeXcircle;
  ycircle += VelocidadeYcircle;
}

function bordaDaPreview() {
  if (xcircle + raio > width || 
      xcircle - raio < 0){
    VelocidadeXcircle *= -1;
  }
  if (ycircle + raio > height || 
      ycircle - raio < 0){
    VelocidadeYcircle *= -1;
  }
}

function mostraRaquete(x,y){
  rect (x,y,widthRacket,heightRacket);
}

function movimentoRaqueteVermelha(){
  if (keyIsDown(UP_ARROW)){
    yredRacket -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yredRacket += 10;
  }
}

function VerificaColisaoRaquete(){
  if (xcircle - raio < xredRacket + widthRacket &&
    ycircle - raio < yredRacket + heightRacket && 
    ycircle + raio > yredRacket) {
    VelocidadeXcircle *= -1    
  }
}

function colisaoMinhaRaqueteBiblioteca() {
  colidiu = collideRectCircle (xredRacket, yredRacket, widthRacket, heightRacket, xcircle, ycircle,raio);
  if (colidiu) {
    VelocidadeXcircle *= -1;   
  }
}

function colisaoMinharosaRacketBiblioteca() {
  colidiu = collideRectCircle (xrosaRacket, yrosaRacket, widthRacket, heightRacket, xcircle, ycircle,raio);
  if (colidiu) {
    VelocidadeXcircle *= -1;   
  }
}

function movimentarosaRacket(){
  VelocidadeYRosaRacket = ycircle - yrosaRacket - widthRacket / 2 -30;
  yrosaRacket += VelocidadeYRosaRacket

}

Espero ter ajudado!

Reforço que estou à disposição para tirar dúvidas.

Abraços.

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