2
respostas

[Dúvida] Raquete do oponente não rebate a bolinha.

Opa, tudo bem gente?

Tudo pelos conformes, seguindo a orientação do professor, porém, a raquete do oponente não bate na bolinha. Já revisei o código inteiro e não achei resposta, alguém tem ideia?

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

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

//variáveis da raquete

let xRaquete = 5; let yRaquete = 150; let compRaquete = 10; let altRaquete = 90;

let colidiu = false;

//variáveis do oponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

//funcionalidades

function draw() { background(0); mostraBolinha(); movimentaBolinha(); colisoes(); mostrarRaquete(xRaquete, yRaquete); movRaquete(); veriRaquete(); // colisaoRaqueteBiblioteca(); mostrarRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); colisaoRaqueteOponenteBiblioteca();

}

//fundo preto function setup() { createCanvas(600, 400); }

//posição centro, raio e diametro function mostraBolinha(){ circle(xBolinha, yBolinha, diametro) }

//movimentação function movimentaBolinha(){ xBolinha += velocidadeXbolinha yBolinha += velocidadeYBolinha } //colisão function colisoes(){ if (xBolinha + raio > width || xBolinha - raio < 0){ velocidadeXbolinha *= -1; } if(yBolinha + raio > height || yBolinha - raio < 0){ velocidadeYBolinha *= -1; } }

//Raquete function mostrarRaquete(x , y){ rect(x, y, compRaquete, altRaquete); }

//Movimento function movRaquete(){ if(keyIsDown(UP_ARROW)){ yRaquete -= 10; } if(keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

//colisão raquete function veriRaquete(){ if (xBolinha - raio < xRaquete + compRaquete && yBolinha - raio < yRaquete + altRaquete && yBolinha + raio > yRaquete){ velocidadeXbolinha *= -1; } }

//Colisão raquete biblioteca ps5 function colisaoRaqueteBiblioteca() { colidiu = collideRectCircle(xRaquete, yRaquete, compRaquete, altRaquete, xBolinha, yBolinha, raio); if (colidiu){ velocidadeXbolinha *= -1; } } function colisaoRaqueteOponenteBiblioteca() { colidiu = collideRectCircle(xRaqueteOponente, yRaqueteOponente, compRaquete, altRaquete, xBolinha, yBolinha, raio); if (colidiu){ velocidadeXbolinha *= -1; } } //Raquete do oponenente function movimentaRaqueteOponente() { velocidadeYOponente = yBolinha - yRaqueteOponente - compRaquete / 2 - 30; yRaqueteOponente += velocidadeYOponente }

2 respostas

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


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

//variáveis da raquete

let xRaquete = 5;
let yRaquete = 150;
let compRaquete = 10;
let altRaquete = 90;

let colidiu = false;

//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;


//funcionalidades

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisoes();
  mostrarRaquete(xRaquete, yRaquete);
  movRaquete();
  veriRaquete();
  //
  colisaoRaqueteBiblioteca();
  mostrarRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  colisaoRaqueteOponenteBiblioteca();


}

//fundo preto
function setup() {
  createCanvas(600, 400);
}

//posição centro, raio e diametro
function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro)
}    

//movimentação
function movimentaBolinha(){ 
    xBolinha += velocidadeXbolinha
    yBolinha += velocidadeYBolinha
}
//colisão
function colisoes(){
    if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadeXbolinha *= -1;
  }
  if(yBolinha + raio > height || yBolinha - raio < 0){ 
    velocidadeYBolinha *= -1;
  }
}

//Raquete
function mostrarRaquete(x , y){
  rect(x, y,  compRaquete,  altRaquete);
}

//Movimento
function movRaquete(){
  if(keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if(keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
}
}

//colisão raquete
function veriRaquete(){
  if (xBolinha - raio < xRaquete + compRaquete && yBolinha - raio < yRaquete + altRaquete && yBolinha + raio > yRaquete){
    velocidadeXbolinha *= -1;
  }
}

//Colisão raquete biblioteca ps5
function colisaoRaqueteBiblioteca() {
    colidiu = collideRectCircle(xRaquete, yRaquete, compRaquete, altRaquete, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadeXbolinha *= -1;
    }
}
function colisaoRaqueteOponenteBiblioteca() {
    colidiu = collideRectCircle(xRaqueteOponente, yRaqueteOponente, compRaquete, altRaquete, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadeXbolinha *= -1;
    }
}
//Raquete do oponenente
function movimentaRaqueteOponente() {
    velocidadeYOponente = yBolinha - yRaqueteOponente - compRaquete / 2 - 30;
    yRaqueteOponente += velocidadeYOponente
}

Olá, Guiherme! Tudo certo?

O problema aconteceu porque você modificou o tamanho da bolinha, isso vai acarretar em algumas mudanças no restante do projeto também. VOcê pode alterar o valor do raio por um número maior e assim aumentar a sensibilidade de colisão. observe o código abaixo:

function colisaoRaqueteBiblioteca() {
    colidiu = collideRectCircle(xRaquete, yRaquete, compRaquete, altRaquete, xBolinha, yBolinha, 30);
    if (colidiu){
        velocidadeXbolinha *= -1;
    }
}

Espero ter ajudado!

Bons estudos!