8
respostas

Placar do pong marca múltiplos de 9

//Variaveis da bolinha

let xBolinha = 300;
let yBolinha = 200;
let diametro = 24;
let raio = diametro / 2;

//Variaveis da velocidade
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;

//Variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let alturaRaquete = 90;
let comprimentoRaquete = 10;
let posicaoXRaquete = 2;
let posicaoYRaquete = 2;

let colidiu = false;

//Variaveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

//Variavel placar
let meusPontos = 0;
let pontosOponente = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificarBorda();
  mostrarRaquete(xRaquete, yRaquete);
  movimentaRaquete();
  //verificaColisaoRaquete();
  colisaoMinhaRaqueteBiblioteca(xRaquete, yRaquete);
  colisaoMinhaRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente);
  mostrarRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  incluiPlacar();
  marcaPonto();

}

function mostraBolinha() {
  circle(xBolinha, yBolinha, diametro)
}

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

function verificarBorda() {
  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, comprimentoRaquete, alturaRaquete);
}

function movimentaRaquete() {
  if (keyIsDown(UP_ARROW)) {
    yRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 10;
  }
}

function verificaColisaoRaquete() {
  if (xBolinha - raio < xRaquete + comprimentoRaquete) {
    velocidadeXBolinha *= -1;
  }
}

function colisaoMinhaRaqueteBiblioteca(x,y){
  colidiu = 
  collideRectCircle(x,y, comprimentoRaquete,alturaRaquete,xBolinha,yBolinha,raio);
  if (colidiu){
  velocidadeXBolinha *= -1;
    }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete/2 - 30;
  yRaqueteOponente += velocidadeYOponente;
}

function incluiPlacar(){
  fill(255)
  text(meusPontos, 285, 26);
  text(pontosOponente, 315, 26);

}

function marcaPonto(){
  if (xBolinha > 590){
  meusPontos += 1;
  }
  if (xBolinha < 10){
  pontosOponente += 1; 
  }
}

Pessoal, meu placar tá marcando os pontos como múltiplos de 9. KKK Não faço a menor ideia do motivo. Alguém me ajuda?

8 respostas

Acredito que seja por causa do seu canvas ter tamanho 600 e sua verificação para marcar pontos ser maior que 590, então é disparado 9 vezes o evento (Nas posições 591, 592, 593... 599).

Altere a marcação de pontos para

function marcaPonto(){
  if (xBolinha == 590){
  meusPontos++;
  }
  if (xBolinha == 10){
  pontosOponente++; 
  }
}

e veja se funciona corretamente.

Agora tá indo de 2 em 2 kkkk

Quando a bolinha "bate" na borda ela volta? Se for isso, então ela está passando duas vezes na posição que marca os pontos.

Se for isso mesmo, você pode fazer um "arranjo técnico" (vulga gambiarra) e somar 0.5, dessa forma o evento inteiro vai somar 1, ou quando a bolinha tocar na borda resetar para a posição inicial.

Coloquei pra somar meio e de fato termina em 1, mas ele conta 0.5 quando vai e 0.5 quando volta. Existe uma maneira de não contar uma das vezes? Tipo pra ele contar direto um ponto.

Tente usar esse código:

function marcaPonto(){
  if (xBolinha == width){
  meusPontos++;
  }
  if (xBolinha == 0){
  pontosOponente++; 
  }
}

Dessa forma ele irá fazer a chamada apenas quando bater no ponto 0 ou no ponto width.

Esse código conta dois pontos, amigo!

Olá Natalia, tente diminuir o tamanho do diâmetro da sua bolinha, 24 é um valor muito alto, ela está passando varias vezes pela faixa de pontuação. Tente com um valor menor que 15.

Thássio, de fato ao diminuir o diâmetro o placar conta 0.5 para 1 bem rapidamente, mas ainda assim o placar não vai direto. Realmente não consigo ver o erro nesse código. Até porque na video-aula ele funciona normalmente, de um em um.