3
respostas

Após criar a colisão com a Raquete do Oponente, a bolinha fica trêmula no meio da tela

Se alguém conseguir me ajudar, pois já tentei algumas coisas e não funcionou. Desde já agradeço!

//variáveis de dimensão da bola let xBolinha = 300; let yBolinha = 200; let diametro = 30; let raio = diametro / 2;

//variáveis de velocidade da bola let velocidadeX_bolinha = 6; let velocidadeY_bolinha = 6;

//variáveis da raquete let xRaquete = 5; let yRaquete = 150; let comprimentoRaquete = 10; let alturaRaquete = 90;

//variáveis do oponente

let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

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

function draw() { background(0); desenhaBola(); movimentaBola(); verificaColisao_borda(); mostraRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente) movimentaRaqueteUsuario(); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaquete, yRaquete); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); }

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

function movimentaBola() { xBolinha += velocidadeX_bolinha; yBolinha += velocidadeY_bolinha; }

function verificaColisao_borda() { if(xBolinha + raio > width || xBolinha - raio < 0){ velocidadeX_bolinha *= -1; }

if(yBolinha + raio > height || yBolinha - raio < 0){ velocidadeY_bolinha *= -1; } }

function mostraRaquete(x, y) { rect(x, y, comprimentoRaquete, alturaRaquete); }

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

function movimentaRaqueteOponente() { velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30; yRaqueteOponente += velocidadeYOponente; }

function verificaColisaoRaquete(x, y) { if(xBolinha - raio < x + comprimentoRaquete && yBolinha - raio < y + alturaRaquete && yBolinha + raio > y){ velocidadeX_bolinha *= -1; } }

3 respostas

olá o problema esta na função

 //verificaColisaoRaquete(xRaquete, yRaquete);  
 //verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); 
}

comenta as duas que a bolinha vai ir certinho

então olhei mais de perto e percebi que para a raquete do oponente e a nossa as condições são diferentes a não ser que usemos a biblioteca collide2d ai sim podemos usara função com os parâmetros 'x' e 'y' delas

aqui como ficou o meu

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentoDaRaquete();
  colisaoPorBiblioteca(xRaquete,yRaquete);   
  colisaoPorBiblioteca(xRaqueteOponente,yRaqueteOponente);
  //movimentoDaRaqueteOpomenteMultiplayer();
  movimentoRaqueteOponente();
  chanceDeErro(xBolinha);
 //verificaColisaoComRaquete();//solução criado pelo professor
  incluirPlacar();
  marcaPonto()   
}

veja que tenho a verificação de colisão que o professor fez comentada e a verificação pela biblioteca com parâmetros já que ela sim só muda os eixos 'x' e 'y'

tomei a liberdade de atualizar o código que mandou da uma olhada e me fala

//variáveis de dimensão da bola
let xBolinha = 300; 
let yBolinha = 200; 
let diametro = 30; 
let raio = diametro / 2;

//variáveis de velocidade da bola 
let velocidadeX_bolinha = -4; 
let velocidadeY_bolinha = 0;

//variáveis da raquete
let xRaquete = 5; 
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

//variáveis do oponente

let xRaqueteOponente = 585; 
let yRaqueteOponente = 150; 
let velocidadeYOponente;

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

function draw() { 
  background(0);
  desenhaBola();
  movimentaBola();
  verificaColisao_borda();
  mostraRaquete(xRaquete, yRaquete);                                 mostraRaquete(xRaqueteOponente,yRaqueteOponente)
  movimentaRaqueteUsuario();  
  movimentaRaqueteOponente(); 
  verificaColisaoRaquete();
  verificaColisaoRaqueteO(); 
}

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

function movimentaBola() { xBolinha += velocidadeX_bolinha; yBolinha += velocidadeY_bolinha; }

function verificaColisao_borda() { if(xBolinha + raio > width || xBolinha - raio < 0){ velocidadeX_bolinha *= -1; }

if(yBolinha + raio > height || yBolinha - raio < 0){ velocidadeY_bolinha *= -1; } }

function mostraRaquete(x, y) { rect(x, y, comprimentoRaquete, alturaRaquete); }

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

function movimentaRaqueteOponente() { velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30; yRaqueteOponente += velocidadeYOponente; }

function verificaColisaoRaquete() { 
  if(xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha + raio > yRaquete && yBolinha - raio < yRaquete + alturaRaquete){
    velocidadeX_bolinha *= -1; 
  } 
}
function verificaColisaoRaqueteO() { 
  if(xBolinha + raio > xRaqueteOponente - 2 && yBolinha + raio > yRaqueteOponente && yBolinha - raio < yRaqueteOponente + alturaRaquete){
    velocidadeX_bolinha *= -1; 
  } 
}

espero que ajude ! Deus abençoe

ha sim caso copie o código eu coloquei a velocidade da bolinha no eixo 'y' o então ela só vai deslocar no 'x' é só atribuir a velocidade que ela vai ir como deveria rsrsrsrs

Muito obrigado, realmente fiquei com dificuldade para achar o erro.