Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Colisão da raquete da direita (SEM BIBLIOTECA)

O meu pong foi feito de player VS player e não de player VS bot. alguém poderia tentar me mostrar a colisão da raquete da direita mas sem a utilização da biblioteca por favor.

//posicao da bola
let xBola = 300;
let yBola = 200;

//tamanho da bola
let wBola = 10;
let hBola = 10;

//velocidade da bola
let velocidadeXBola = 2;
let velocidadeYBola = 2;

//posicao da raquete esquerda
let xRaqueteL = 10;
let yRaqueteL = 150;

//tamanho da raquete esquerda
let wRaqueteL = 10;
let hRaqueteL = 30;

//posicao da raquete direita
let xRaqueteR = 585;
let yRaqueteR = 150;

//tamanho da raquete direita
let wRaqueteR = 10;
let hRaqueteR = 30;

//teclas
let teclaW = 87;
let teclaS = 83;

function setup() {

  //tamanho do cenario
  createCanvas(600, 400);
}

function draw() {

  //fundo preto
  background(0);

  desenhaSeparacao();
  desenhaBola();
  desenhaRaquetes();
  movimentaBola();
  movimentaRaquetes();
  colisaoDaBorda();
  colisaoDasRaquetes()
}

function desenhaSeparacao() {

  //desenho da separacao do cenario
  for(let i = 0; i < 390; i += 25) {

    rect(290, 5+i, 10, 15);
  }
}

function desenhaBola() {

  //desenho da bola
  rect(xBola, yBola, wBola, hBola);
}

function movimentaBola() {

  //movimentacao da bola
  xBola += velocidadeXBola;
  yBola += velocidadeYBola;
}

function colisaoDaBorda() {

  //colisao da largura
  if(xBola == 590 || xBola == 0) {

    velocidadeXBola *= -1;
  }

  //colisao da altura
  if(yBola == 390 || yBola == 0){

    velocidadeYBola *= -1;
  }
}

function desenhaRaquetes() {

  //desenho da raquete esquerda
  rect(xRaqueteL, yRaqueteL, wRaqueteL, hRaqueteL);

  //desenho da raquete direita
  rect(xRaqueteR, yRaqueteR, wRaqueteR, hRaqueteR);
}

function movimentaRaquetes() {

  //raquete esquerda para cima
  if(keyIsDown(teclaW) && yRaqueteL >= 10) {

    yRaqueteL -= 10;
  }

  //raquete esquerda para baixo
  if(keyIsDown(teclaS) && yRaqueteL <= 360) {

    yRaqueteL += 10;
  }

  //raquete direita para cima
  if(keyIsDown(UP_ARROW) && yRaqueteR >= 10) {

    yRaqueteR -= 10;
  }

  //raquete direita para baixo
  if(keyIsDown(DOWN_ARROW) && yRaqueteR <= 360) {

    yRaqueteR += 10;
  }
}

function colisaoDasRaquetes() {

  //colisao da raquete esquerda
  if(xBola < xRaqueteL + wRaqueteL && yBola < yRaqueteL + hRaqueteL && yBola > yRaqueteL) {

    velocidadeXBola *= -1;
  }

  //colisao da raquete direita
  if(xBola > xRaqueteR + wRaqueteR && yBola > yRaqueteR + hRaqueteR && yBola < yRaqueteR) {

    velocidadeXBola *= -1;
  }
}
2 respostas
solução!

Fui por tentativa e erro. No trecho

  //colisao da raquete direita
  if(xBola > xRaqueteR + wRaqueteR && yBola > yRaqueteR + hRaqueteR && yBola < yRaqueteR) {

troquei por

if(xBola > xRaqueteR - wRaqueteL && yBola > yRaqueteR && yBola < yRaqueteR + hRaqueteR) {

Obrigado pela ajuda leandra, antes da sua postagem acabei pedindo ajuda de outras pessoas mais valeu mesmo assim :)

Só uma observação: por mais que a bola bata na raquete ela não bate na ponta de cima, tanto na direita e tanto na esquerda, por tanto deram uma incrementada na função para que a bola bata na ponta de cima.

function colisaoDasRaquetes() {

  //colisao da raquete esquerda
  if(xBola < xRaqueteL + wRaqueteL && xBola + wBola > xRaqueteL && yBola < yRaqueteL + hRaqueteL && yBola + hBola > yRaqueteL) {

    velocidadeXBola *= -1;
  }

  //colisao da raquete direita

  if(xBola + wBola > xRaqueteR && xBola < xRaqueteR + wRaqueteR && yBola < yRaqueteR + hRaqueteR && yBola + hBola > yRaqueteR) {

    velocidadeXBola *= -1;
  }

}

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