5
respostas

Meu placar marca de 3 em 3 pontos

Então, meu placar ao invés de marcar 1 ponto, ele vai marcando de 3 em 3, alguém poderia me ajudar?

Segue abaixo o meu código e o link do meu projeto no P5.JS

Link do projeto:https://editor.p5js.org/v9lvital/sketches/5Hsp1P3kB

// váriaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;

// velocidade da bolinha
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;

//variáveis da minha raquete
let xMinhaRaquete = 5;
let yMinhaRaquete = 150;
let wRaquete = 10;
let hRaquete = 90;

//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

//váriaveis do placar
let meusPontos = 0;
let pontosOponente = 0;

let colidiu = false;

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

function draw() {
  background(220, 141, 155); //RGB Value
  mostrarBolinha();
  mostrarRaquete(xMinhaRaquete, yMinhaRaquete);
  mostrarRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentarBolinha();
  movimentarMinhaRaquete();
  movimentarRaqueteOponente();
  verificaColisaoBolinha();

  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  verificaColisaoRaquete(xMinhaRaquete, yMinhaRaquete);
  mostrarPlacar();
  pontuação();
}

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

function mostrarRaquete(x, y) {
  rect(x, y, wRaquete, hRaquete);
}

function movimentarBolinha() {
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function movimentarMinhaRaquete() {
  if (keyIsDown(UP_ARROW)) {
    yMinhaRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yMinhaRaquete += 10;
  }
}

function movimentarRaqueteOponente() {
  velocidadeYOponente = yBolinha - yRaqueteOponente - wRaquete / 2 - 50;
  yRaqueteOponente += velocidadeYOponente;
}

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

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

function verificaColisaoRaquete(x, y) {
  colidiu = collideRectCircle(
    x,
    y,
    wRaquete,
    hRaquete,
    xBolinha,
    yBolinha,
    raio
  );
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}

function mostrarPlacar() {
  fill(255);
  text(meusPontos, 278, 26);
  text(pontosOponente, 321, 26);
}

function pontuação() {
  if (xBolinha > 590) {
    meusPontos += 1;
  }

  if (xBolinha < 10) {
    pontosOponente += 1;
  }
}
5 respostas

Estava tendo um problema parecido, mas alterando os valores que a bolinha precisa ultrapassar para marcar o ponto ficou tudo certo. Ficou assim:

function pontuação() { if (xBolinha > 600) { meusPontos += 1;

if (xBolinha < 0) {
pontosOponente += 1;

Mas, qual foi o valor do seu diametro? 15 mesmo?

sim, não alterei o diâmetro.

Eu suspeito que a resolução do monitor ou algo do tipo possa influenciar nessa marcação de pontos. Eu Tive de alterar o limite do espaço alcançado para marcar apenas um ponto tbm.... e cuidado, pois quando vc usar a função "stroke" pode acabar dando erro novamente... ai vc altera o tamanho da bolinha ou o limite novamente.

Isso significa que sua função de pontuação é executada mais de uma vez. Você checa, pontua e pensa que acabou por ali. Mas na próxima repetição do loop a bolinha ainda está na área que você estabeleceu pra pra ganhar pontos. Simplesmente não deu tempo ainda dela sair. No seu caso ele está conseguindo efetuar três vezes essa verificação. Isso é afetado pelo valor na sua linha if (xBolinha > 590), mas também pela velocidade horizontal da bolinha (velocidadeXBolinha). Experimente mexer nessas coisas e vai ver mudanças. O diâmetro da bolinha também influencia porque o raio dela é usado na sua função verificaColisaoBolinha para verificar a colisão com a borda.