1
resposta

[Dúvida] Algumas vezes a bolinha fica presa por muito poucos segundo na raquete do jogador e contabiliza muitos pontos.

let xBola = 300;
let yBola = 200;
let diametro = 25;
let velocidadeXBola = 10;
let velocidadeYBola = 10;
let raio = diametro / 2;
//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

let colidiu = false

//variaveis oponente
let xRaqueteOpo = 585;
let yRaqueteOpo = 150;
let velocidadeYOpo 

//placar do game
let meusPontos = 0;
let pontosOponente = 0;

function mostraBola () {
   circle(xBola, yBola, diametro);
}
function movimentoBola () {

  xBola += velocidadeXBola;
  yBola += velocidadeYBola;

}
function movimentoRaquete(){
 if (keyIsDown(UP_ARROW)){
   yRaquete -= 10;
 }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}
function colisaoBorda(){
   if (xBola + raio > width || xBola - raio < 0){
    velocidadeXBola *= -1
  }
  
  if (yBola + raio > height || yBola - raio < 0){
    velocidadeYBola *= -1
  }
}
function mostraRaquete(x,y){
  rect(x, y, comprimentoRaquete, alturaRaquete)
}
function movimentoRaqueteOpo(){
  velocidadeYOpo = yBola - yRaqueteOpo - comprimentoRaquete / 2 - 50
  yRaqueteOpo += velocidadeYOpo
}
function colisaoRaqueteGit(x,y){
  colidiu = collideRectCircle(x, y, comprimentoRaquete, alturaRaquete, xBola, yBola, raio);
  if(colidiu){
    velocidadeXBola *= -1}
}
function incluiPlacar(){
  fill(255)
  text(meusPontos, 278, 26)
  text(pontosOponente, 321, 26)
}
function marcaPontos(){
  if (xBola > 590){
    meusPontos += 1;
  }
  if (xBola < 12){
    pontosOponente += 1;
  }
}

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

function draw() {
  background(0);
  mostraBola();
  movimentoBola();
  colisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentoRaquete();
  colisaoRaqueteGit(xRaquete, yRaquete);
  colisaoRaqueteGit(xRaqueteOpo, yRaqueteOpo);
  mostraRaquete(xRaqueteOpo, yRaqueteOpo);
  movimentoRaqueteOpo();
  incluiPlacar();
  marcaPontos();
}
1 resposta

Oi, Yan

Minha solução foi:

Só marcar um novo ponto se bolinha passar pelo meio do jogo

let xBola = 300;
let yBola = 200;
let diametro = 25;
let velocidadeXBola = 10;
let velocidadeYBola = 10;
let raio = diametro / 2;
//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

let colidiu = false
let passouMeio = true; // se a bolinha passou no meio do jogo


//variaveis oponente
let xRaqueteOpo = 585;
let yRaqueteOpo = 150;
let velocidadeYOpo 

//placar do game
let meusPontos = 0;
let pontosOponente = 0;

function mostraBola () {
   circle(xBola, yBola, diametro);
}
function movimentoBola () {

  xBola += velocidadeXBola;
  yBola += velocidadeYBola;

}
function movimentoRaquete(){
 if (keyIsDown(UP_ARROW)){
   yRaquete -= 10;
 }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}
function colisaoBorda(){
   if (xBola + raio > width || xBola - raio < 0){
    velocidadeXBola *= -1
  }
  
  if (yBola + raio > height || yBola - raio < 0){
    velocidadeYBola *= -1
  }
}
function mostraRaquete(x,y){
  rect(x, y, comprimentoRaquete, alturaRaquete)
}
function movimentoRaqueteOpo(){
  velocidadeYOpo = yBola - yRaqueteOpo - comprimentoRaquete / 2 - 50
  yRaqueteOpo += velocidadeYOpo
}
function colisaoRaqueteGit(x,y){
  colidiu = collideRectCircle(x, y, comprimentoRaquete, alturaRaquete, xBola, yBola, raio);
  if(colidiu){
    velocidadeXBola *= -1}
}
function incluiPlacar(){
  fill(255)
  text(meusPontos, 278, 26)
  text(pontosOponente, 321, 26)
}
function marcaPontos(){  // foi modificado
  if (xBola > 590 && passouMeio){
    meusPontos += 1;
    passouMeio = false;
  }
  if (xBola < 12 && passouMeio){
    pontosOponente += 1;
    passouMeio = false;
  }
}

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

function draw() {
  background(0);
  mostraBola();
  movimentoBola();
  colisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentoRaquete();
  colisaoRaqueteGit(xRaquete, yRaquete);
  colisaoRaqueteGit(xRaqueteOpo, yRaqueteOpo);
  mostraRaquete(xRaqueteOpo, yRaqueteOpo);
  movimentoRaqueteOpo();
  incluiPlacar();
  marcaPontos();
  verificaPassouMeio();  // evitar pontos multiplos
}

function verificaPassouMeio() {
  if (xBolinha > width/2- 50 && xBolinha < width/2 + 50) {
    passouMeio = true;
  }  
}
  Caso este post tenha lhe ajudado, marque-o como solução . Bons Estudos!  🤓