2
respostas

Placar marcando em dobro

Meu placar marca 2x mais. Pq sera?


// variaves bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let velocidadeXBolinha = 6;
let velocidadeyBolinha = 6;

//variaveis quadrado
let xSquare = 20;
let ySquare = 100;
let velocidadeySquare = 6;
let largura = 20;
let comprimento = 90;

//variavel colisor p5
let colidiu = false
let colidiuAI= false;

//variavel oponente
let xOponente = 540;
let yOponente = 100;
let velocidadeyOponente = 6;
let larguraOponente = 20;
let comprimentoOponente = 90;

//placar jogo
let meuspontos = 0;
let oponentepontos = 0;




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




function draw() {
  background(0);
  Quadrado();
  movimentoBola();
  Bolinha();
  //VerificarColisao();
  colisao();
  Oponente();
  IAOponente();
  colisaoAI();
  placar();
  marcarpontos();
  //setInterval(marcarpontos, 20000);



}

//funçoes daqui pra baixo


function Bolinha(){
  circle(xBolinha, yBolinha, diametro);
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeyBolinha;

}

function Quadrado(){
  rect(xSquare, ySquare, largura, comprimento);
  if(keyIsDown(UP_ARROW) && ySquare>10){
    ySquare = ySquare -6;

     }
  if(keyIsDown(DOWN_ARROW) && ySquare<300){
    ySquare = ySquare +6;

     }
  }
function movimentoBola(){
  if(xBolinha >= 600){
  velocidadeXBolinha = velocidadeXBolinha - 6;
}
 if(xBolinha <= 0){
  velocidadeXBolinha = velocidadeXBolinha + 6;
} 
  if (yBolinha >= 380){
    velocidadeyBolinha = velocidadeyBolinha -1;
  }
if (yBolinha <= 20){
    velocidadeyBolinha = velocidadeyBolinha + 1;
  }

}

function VerificarColisao(){
  if(xBolinha - diametro < xSquare + largura && yBolinha - diametro < ySquare + comprimento && yBolinha + diametro > ySquare){
    velocidadeXBolinha = velocidadeXBolinha * -1;

     }

}

function colisao(){
  colidiu = 
  collideRectCircle(xSquare, ySquare, largura, comprimento, xBolinha, yBolinha, diametro);
  if(colidiu){
    velocidadeXBolinha = velocidadeXBolinha * -1;
  }
}

  function colisaoAI(){
  colidiuAI = 
  collideRectCircle(xOponente, yOponente, larguraOponente, comprimentoOponente, xBolinha, yBolinha, diametro);
  if(colidiuAI){
    velocidadeXBolinha = velocidadeXBolinha * -1;
  }


}

function Oponente(){
  rect(xOponente, yOponente, larguraOponente, comprimentoOponente);
}

function IAOponente(){
  yOponente = yBolinha/2;

}

function placar(){
  fill(255);
  textSize(24);
  text(meuspontos, 150, 36);
  text(oponentepontos, 450, 36);

}
function marcarpontos(){
  if(xBolinha <= 0){
    oponentepontos++;     
     }
   if(xBolinha >= 600){
    meuspontos++;     
     }
}
2 respostas

Oi André, tudo joia?

Comigo ocorreu algo parecido, minha solução foi "rechear" os parâmetros de marcar pontos desta forma:

function marcaPonto() {
    if (xBolinha > (width-raio)) {
        meusPontos += 1;
    }
    if (xBolinha < raio) {
        pontosDoOponente += 1;
    }
}

Não esquecendo de dizer o que é diâmetro:

let diametro = 15;
let raio = diametro / 2;

Dessa forma, o tamanho da bolinha e da tela podem ser alteradas, que não vai influenciar em nada o funcionamento do jogo. Espero que isto te ajude e coloco aqui embaixo como estou fazendo:

//tamanhodatela
let width = 600;
let height = 400;

//variáveis da Bolinha
let xBolinha = width / 2;
let yBolinha = height / 2;
let diametro = 15;
let raio = diametro / 2;

//velocidade da Bolinha
let velocidadeXBolinha = 3;
let velocidadeYBolinha = 3;

//variáveis da minha raquete
let RaqueteComprimento = 10;
let RaqueteAltura = 90;
let xRaquete = 5;
let yRaquete = height / 2 - RaqueteAltura / 2;

//variáveis do oponente
let xRaqueteOponente = width - 15;
let yRaqueteOponente = height / 2 - RaqueteAltura / 2;
let velocidadeYOponente;

//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;

let colidiu = false;

function setup() {
  createCanvas(width, height);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  verificaColisaoRaqueteBiblioteca(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  //movimentaRaqueteOponente();
  verificaColisaoRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();

}

function mostraBolinha() {
  circle(xBolinha, yBolinha, diametro);
  let corBolinha = color("blue");
  fill(corBolinha);
}

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

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

function mostraRaquete(x, y) {
  rect(x, y, RaqueteComprimento, RaqueteAltura);
  //let corRaquete = color ('red')
  //fill (corRaquete);
}

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

function verificaColisaoRaquete() {
  if (
    xBolinha - raio < xRaquete + RaqueteComprimento &&
    yBolinha - raio < yRaquete + RaqueteAltura &&
    yBolinha + raio > yRaquete
  ) {
    velocidadeXBolinha *= -1;
  }
}

function verificaColisaoRaqueteBiblioteca(x,y) {
  colidiu = collideRectCircle(
    x,
    y,
    RaqueteComprimento,
    RaqueteAltura,
    xBolinha,
    yBolinha,
    raio
  );
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}

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

function incluiPlacar() {
    fill(255);
    text(meusPontos, 278, 26);
    text(pontosDoOponente, 321, 26);
}
function marcaPonto() {
    if (xBolinha > (width-raio)) {
        meusPontos += 1;
    }
    if (xBolinha < raio) {
        pontosDoOponente += 1;
    }
}

Muito obrigado pela resposta. Vendo seu exemplo acredito que o meu esta marcando em dobro pois o centro da bola esta passando duas vezes pela marcação de tela que determinei. Voce em vez de determinar medidas de canvas orientou pelo tamanho do raio. Vou tentar isso depois.

function marcaPonto() {
    if (xBolinha > (width-raio)) {
        meusPontos += 1;
    }
    if (xBolinha < raio) {
        pontosDoOponente += 1;
    }
}