1
resposta

A bola não esta batendo na raquete

Oi, eu estava fazendo a aula Jogos clássicos parte 1: Pong com Javascript. Em uma parte da aula, o programador exportou o arquivo de outra biblioteca (colisão raquete oponente)

Eu fiz isso e deu certo, mas então eu decidir fazer isso sem exportar o arquivo. Agora a bolinha fica se mexendo somente somente no eixo Y, como se estivesse presa, ela não consegue ir para os lados. Deve ter dado algum conflito entre os algoritmos, mas eu estou começando agora, não sei como resolver.

poderiam me ajudar?

segue o código a baixo

let xBola = 300;
let yBola = 200;
let diametro = 30;
let raio = diametro / 2;

let velocidadeXBola = 6;
let velocidadeYBola = 6;

//variaveis da raquete 
let xRaquete = 5;
let yRaquete = 150;
let wRaquete = 10;
let hRaquete = 90;

//variaveis do oponente
let xRaquete2 = 585
let yRaquete2 = 150
let wRaquete2 = 10
let hRaquete2 = 90
let velocidadeYOponente;

function mostraBola(){
  circle (xBola, yBola, diametro);
}
function movimentoBola(){
   xBola += velocidadeXBola
   yBola += velocidadeYBola
}
function colisaoBorda(){
  if (xBola + raio> width || xBola - raio < 0){
    velocidadeXBola *= -1;
  }
  if (yBola + raio> height || yBola - raio < 0){
    velocidadeYBola *= -1
  }
}
function mostrarRaquete(){ 
  rect(xRaquete, yRaquete, wRaquete, hRaquete);
}
function colisaobolaraqueteeu(){
  if (xBola - raio < xRaquete + wRaquete && yBola - raio < yRaquete + hRaquete && yBola > yRaquete)
    velocidadeXBola *= -1;
}
function mostrarRaqueteOponente(){ 
  rect(xRaquete2, yRaquete2, wRaquete2, hRaquete2);
}
function movimentoOponente(){
  velocidadeYOponente = yBola - yRaquete2 - wRaquete  / 2 - 60
  yRaquete2 += velocidadeYOponente
}
function colisaoRaqueteOponente(){
  if (xBola - raio < xRaquete2 + wRaquete2 && yBola - raio < yRaquete2 + hRaquete2 && yBola > yRaquete2)
    velocidadeXBola *= -1;
}

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

function draw() {
  background(0);
  mostraBola();
  movimentoBola();
  colisaoBorda();
  mostrarRaquete();  
  minhaquetemov();
  colisaobolaraqueteeu();
  mostrarRaqueteOponente();
  movimentoOponente();
  colisaoRaqueteOponente();

}
function minhaquetemov(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10
  } 
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10
  }
}
1 resposta

Oi, Vinicius! Tudo certo?

Logo de início, peço perdão pela demora em retornar.

Para verificar se a bolinha colidiu com a raquete do oponente, teremos que analisar se a lateral direita da bolinha (representada pela soma entre xBola e raio) é superior à posição horizontal da raquete do oponente (xRaquete2). A primeira linha da estrutura condicional if faz isso, veja:

function colisaoRaqueteOponente(){
  if (xBola + raio > xRaquete2 &&
      yBola - raio < yRaquete2 + hRaquete2 && 
      yBola > yRaquete2)
    velocidadeXBola *= -1;
}

Anteriormente, estávamos utilizando uma condição que se encaixaria super bem com a outra raquete do nosso jogo. Contudo, como as duas raquetes estão em lados diferentes, a verificação deverá se adequar as suas respectivas posições.

Dessa maneira, a bolinha volta a se movimentar normalmente pela tela do nosso jogo! Caso ainda tenha alguma dúvida, sinta-se confortável para postá-la no fórum. Ficarei feliz em te ajudar.

Abraços e até mais, Vinicius!

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