1
resposta

Ping Pong Javascript Bug da Bolinha presa atrás da raquete

Tento Resolver o Bug da Bolinha presa atrás da Raquete mas não consigo. Já tentei 2 opções e não consegui resolver o problema. Alguém pode ajudar? Segue o código:

//variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 180;
let diametro = 18;
let raio = diametro /2;

//velocidade da Bolinha
let velocidadexbolinha = 5;
let velocidadeybolinha = 5;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;

//variáveis do oponente

let xRaqueteOponente= 585;
let yRaqueteOponente = 150;
let velocidadeYoponente;

//Chances de Errar Oponente
let chanceDeErrar = 0;

let colidiu = false;

//placar do jogo
let meuspontos = 0;
let pontosoponente = 0;

//son do jogo
let ponghiit;
let points;
let sound;

function preload(){
  sound = loadSound("sound.mp3");
  points = loadSound("points.wav");
  ballhiit = loadSound("ballhiit.wav");
}

//Medidas da Raquete
let ComprimentoDaRaquete = 10
let AlturaDaRaquete = 80

function setup() {
  createCanvas(600, 400);
  sound.loop()
;}

function draw() {
  background(0,100,0);
  mostrabolinha();
  MovimentoDaBolinha();
  VerificaColisaoDaborda();
  movimentodaraquete ();
  MostrarRaquete(xRaquete, yRaquete);
  //verificaColisaoComRaquete();
  colisaominharaquetebiblioteca();
  MostrarRaqueteOponente(xRaqueteOponente, yRaqueteOponente);
  MovimentaRaqueteOponente();
  colisaoRaqueteOponentebiblioteca ();
  incluiPlacar ();
  marcaponto ();
  meiodecampo();
}

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

function MovimentoDaBolinha(){
  xBolinha += velocidadexbolinha;
  yBolinha += velocidadeybolinha;
}

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

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

function MostrarRaquete (x, y){
    rect(x, y, ComprimentoDaRaquete, AlturaDaRaquete);

}

function MostrarRaqueteOponente (){
    rect(xRaqueteOponente, yRaqueteOponente, ComprimentoDaRaquete, AlturaDaRaquete);

}

function movimentodaraquete (){
  if(keyIsDown(UP_ARROW)){
    yRaquete -=10;
  }

  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

function verificaColisaoComRaquete(){
  if (xBolinha - raio < xRaquete + ComprimentoDaRaquete && yBolinha - raio < yRaquete + AlturaDaRaquete &&  yBolinha + raio > yRaquete){
    velocidadexbolinha *= -1 

  }
}

function colisaominharaquetebiblioteca(){

colidiu =
collideRectCircle(xRaquete,yRaquete,ComprimentoDaRaquete,AlturaDaRaquete, xBolinha, yBolinha,raio);
  if(colidiu){ velocidadexbolinha *=-1;
              ballhiit.play();
             }
}

function colisaoRaqueteOponentebiblioteca(){

colidiu =
collideRectCircle(xRaqueteOponente,yRaqueteOponente,ComprimentoDaRaquete,AlturaDaRaquete, xBolinha, yBolinha,raio);
  if(colidiu){ velocidadexbolinha *= -1;
              ballhiit.play();
             }
}

function MovimentaRaqueteOponente (){
  velocidadeYoponente = yBolinha -yRaqueteOponente -ComprimentoDaRaquete /2 -30
  yRaqueteOponente += velocidadeYoponente + chanceDeErrar
  calculaChanceDeErrar();

  function calculaChanceDeErrar(){
 if(pontosoponente >= meuspontos){chanceDeErrar +=1
 if (chanceDeErrar >= 39) {chanceDeErrar = 40}                                } 
  else { chanceDeErrar -=1
 if (chanceDeErrar <= 35){
   chanceDeErrar = 35
  }
 }
}

}



 function bolinhaNaoFicaPresa(){
    if (XBolinha - raio < 0){
    XBolinha = 23
    }
}

function incluiPlacar (){
  stroke(255)
  textAlign(CENTER);
  textSize(15);
  fill(color(75,0,130));
  rect(150, 10,40, 20);
  fill(255);
  text(meuspontos,170, 26);
  fill(color(75,0,130));
  rect(450,10,40,20);
  fill(255);
  text (pontosoponente, 470, 26);
}

function marcaponto(){
  if (xBolinha > 590){
    meuspontos += 1; 
    points.play();
  }
  if (xBolinha < 10) {
    pontosoponente += 1;
    points.play();
  }
}

function meiodecampo(){
  line(310,580, 305, 3)
}
1 resposta

Olá Thays, tudo joia?

Peço desculpa pela demora em lhe responder.

Vejo que você fez algumas mudanças no código em relação no que foi passado durante o curso, isso é importante para melhor absolvição do conhecimento espero que você continue assim.

Eu tomei a liberdade de editar a sua pergunta na parte do código, colocando nele a formatação devida para ficar mais fácil a visualização.

Agora voltando á sua dúvida, caso a função bolinhaNaoFicaPresa() seja a sua solução para esse problema e você testou com o código da forma em que estar talvez você tenha se esquecido de chamar essa função dentro da função draw que executa todas as funções dentro do projeto, e por conta disso você não tenha conseguido resolve-lo.

Contudo, desenvolvi uma função que pode fazer com que esse problema da bolinha ficando presa não aconteça mais.

function bolinhaNaoFicaPresa( ){
    if (xBolinha - raio <= 0){
    xBolinha = 20;

    } else {

      if (xBolinha - raio >= 588){
        xBolinha = 570;
      }
    }
}

Nele é feito um reajuste na bolinha toda vez que ele chega na posição determinada pela condição.

Espero que eu tenha lhe ajudado de alguma forma, e caso tenha mais alguma dúvida estarei a sua disposição. Abraços e bons estudos!

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