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

[Bug] Após incluir a função marcar pontos a bolinha ficou presa

Estou com dois problemas A função da colisão da barra2 (raquete do oponente) deixa a bolinha "tremendo" no meio da tela. o segundo problema, após incluir a função de marcar pontos a bolinha se movimenta no eixo y, porém fica no x = 0 ("tremendo")

segue meu código

//var bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let vxBolinha = 6;
let vyBolinha = 6;
let raio = diametro / 2;

//var barra
let xBarra = 0;
let yBarra = 150;
let hBarra = 90;
let lBarra = 10;

//var barra 2 
let xBarra2 = 790;
let yBarra2 = 150;
let vyBarra2;

//placar do jogo 
let pontos1 = 0;
let pontos2 = 0;



function setup() {
  createCanvas(800, 450);
}

function draw() {
  background(0);
  bolinha();
  velocidade_bolinha();
  colisao_bolinha();
  barra(xBarra, yBarra);
  barra(xBarra2, yBarra2);
  movimentoBarra();
  colisaoBarra(xBarra, yBarra);
  movimentoBarra2();
  //colisaoBarra(xBarra2, yBarra2);
  placar(); 
  marcaPonto();
}


function bolinha() {
  circle(xBolinha, yBolinha, diametro);
}
function velocidade_bolinha() {
  xBolinha += vxBolinha;
  yBolinha += vyBolinha;
}
function colisao_bolinha() {
  if (xBolinha + raio > width || xBolinha - raio < 0) {
    vxBolinha *= -1.0;
  }
  if (yBolinha + raio > height || yBolinha - raio < 0) {
    vyBolinha *= -1.0;
  }
}
function barra(x, y) {
  rect(x, y, lBarra, hBarra);
}



function movimentoBarra() {
  if (keyIsDown(UP_ARROW)) {
    yBarra -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yBarra += 10;
  }
}
function colisaoBarra(x, y){
      if (xBolinha - raio < x + lBarra
          && yBolinha - raio < y + hBarra
          && yBolinha + raio > y) {
        vxBolinha *= -1;
    }
}


function movimentoBarra2(){
  vyBarra2 = yBolinha - yBarra2 - lBarra / 2 - 30; 
  yBarra2 += vyBarra2

}

function placar(){
  fill(255)
  text(pontos1, 200, 26)
  text(pontos2, 600, 26)
}

function marcaPonto(){
  if (xBolinha = 0){
    pontos2 += 1
  }
  if (xbolinha = 800){
    pontos1 += 1
  }
} 

https://editor.p5js.org/AwayRafael/full/Nwi5rl32f

3 respostas
solução!

Olá Rafael, tudo certo?

Esses dois problemas relatados aconteceram por conta da sua função marcaPonto(). Nela, em vez de comparar os valores com as variáveis, você está atribuindo esses valores para elas. Então, como solução, basta alterar a simbologia que você está usando de "=" para ">" ou "<" dependendo de qual ponto você tá comparando.

Segue a forma correta:

function marcaPonto(){
  if (xBolinha < 10){
    pontos2 += 1
  }
  if (xBolinha > 795){
    pontos1 += 1
  }
}

Observação: fiz a alteração do valor de "800" para "795" na segunda comparação para o valor ser contado corretamente.

Com isso, espero que eu tenha conseguido lhe ajudar. Caso tenha mais alguma pergunta ou problema, relacionado com este tópico, estarei a disposição para ajudá-lo.

Abraços e bons estudos!

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

Marquei como solucionado sem querer a função da colisão da barra2 ainda causa problemas quando tirro essa função, de fato o jogo funciona e marca pontos, porém o bug se repete quando coloco a função

colisaoBarra(xBarra2, yBarra2);

Olá Rafael, peço perdão pela demora em retornar.

Sobre o bug que você está comentando, está se referindo a bolinha atravessar a "barra2"? Pois foi o único problema que consegui identificar no seu projeto. Então, referente a isso, você deve realizar ajustes tanto nos valores dentro da função, quanto no tamanho da sua bolinha, pois são parâmetros essenciais na mesma.

Contudo, caso tenha avançado um pouco mais no curso, o instrutor mostra uma função que pode ser importada de uma biblioteca que realiza a checagem da colisão da bolinha com a raquete. Utilizando ela esse problema não se torna recorrente, pois não haverá a necessidade de se fazer micros ajustes para funcionar como deveria.

Espero ter esclarecido a seu problema. Caso tenha mais alguma problemática, estarei à disposição.

No mais, grande abraço e bons estudos!