Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

14
respostas

Pontos aumentam de 5 em 5.

Olá! Quando eu e o oponente marcamos pontos, aumenta no placar de 5 em 5 e não de 1 em 1. Mesmo eu verificando, percebo que os códigos estão idênticos ao da aula.

14 respostas

Olá Samuel, tudo bem?

Traz pra gente um print do seu código por favor, isso ajuda a vermos sua dúvida junto com o codigo escrito.

As vezes pode ser uma virgula, parenteses, etc que nossos olhos deixaram passar...

Até mais

Eae!

Samuel, cheguei a ter o mesmo Bug, vi em um local aqui do Fórum que o ponto é marcado de acordo com o XBolinha, ou seja, o centro da bolinha, sem contabilizar a borda, logo ele marca por mais tempo a bolinha dentro da coordenada. Assim você tem que relacionar a velocidade e a posição que contabiliza os pontos, segue o meu ai:

function incluiPontos() {
    if (xBolinha > 592) {
        meusPontos += 1;
        ponto.play();
    }
    if (xBolinha < 8) {
        oponentePontos += 1;
        ponto.play();
    }
}

lembrando que minha variável de velocidade da Bolinha é 5:

let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;

OU

você pode tentar + e - os raios

olá, outra forma de solucionar esse problema é considerar o raio da bolinha dentro da função que marca os pontos.

function marcaPonto(){

 // placar oponente
    if ( xBolinha - raioBolinha < 1){
      placarRaquete2 += 1; ponto.play()
    }

    // placar personagem
     if ( xBolinha + raioBolinha > 599){
      placarRaquete1 += 1; ponto.play()
    }
  }

pode ser também que a bolinha esta marcando os pontos antes de encostar na borda, nesse caso a bolinha marca ponto na ida e na volta. caso seja esse o problema basta você redefinir o ponto " x " onde a bolinha registra o ponto.

ps: estou utilizando uma tela de 600 x 400.

Obrigado a todos, mas ainda não consegui achar o erro!

Aqui está uma cópia de algumas partes do meu código. Até mais!

//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 32; let raio = diametro / 2;

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raqueteComprimento = 10; let raqueteAltura = 90;

()function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; ponto.play(); } if (xBolinha < 10){ pontosDoOponente += 1; ponto.play(); } }

Samuel, conpartilha o link do p5.js para podermos olhar o seu código,

na função maraca ponto tem um erro, tem um " () " antes da palavra resevada function.

()function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; ponto.play(); } if (xBolinha < 10){ pontosDoOponente += 1; ponto.play(); } }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Assim está meu código!

Samuel, se você clicar em </> que tem aqui, você pode compartilhar o seu código. Eu olhei a parte do seu código que enviou, mas não localizei erro. O meu está igual ao seu nesse print que enviou, porém sem o "ponto.play()" e não dá erro. O que deve estar dando erro para você não é na função que marca os pontos, mas em outra função.

function marcaPontos(){
  if (xBolinha<10){
    pontosDoOp+=1
  }
  if (xBolinha>590){
    meusPontos+=1
  }
}

Tenta enviar o seu código inteiro como eu falei no começo, clicando em </>, para que possamos ver o código.

Tem como fazer essa alteraçao nojogo? Estou com o mesmo problema e ainda não comecei a codificar.

olá, Mylena, respondendo a sua pergunta da para fazer todas as alterações aqui sugeridas no seu código, você só precisa ver qual solução se adequa melhor ao seu projeto.

Ok! vou envia-lo inteiro!

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 32;
let raio = diametro / 2;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raqueteComprimento = 10;
let raqueteAltura = 90;

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

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

let colidiu = false;

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

//sons do jogo
let raquetada;
let ponto;
let trilha;

function preload(){
  trilha = loadSound("trilha.mp3");
  ponto = loadSound("ponto.mp3")
  raquetada = loadSound("raquetada.mp3")
}

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

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

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

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

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

function mostraRaquete(x,y){
  rect(x, y, raqueteComprimento, raqueteAltura);
}


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;
    raquetada.play();
  }
}

function verificaColisaoMinhaRaquete(x, y) {
    colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu) {
        velocidadeXBolinha *= -1;
      raquetada.play();
    }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha -yRaqueteOponente - raqueteComprimento /2 - 70;
  yRaqueteOponente += velocidadeYOponente
}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255, 140, 0));
  rect(150, 10, 40, 20);
  fill(255);
  text(meusPontos, 170, 26);
  fill(color(255, 140, 0));
  rect(450, 10, 40, 20);
  fill(255);
  text(pontosDoOponente, 470, 26);
}

function marcaPonto() {
    if (xBolinha > 590) {
        meusPontos += 1;
      ponto.play();
    }
    if (xBolinha < 10) {
        pontosDoOponente += 1;
      ponto.play();
    }
}

Samuel, talvez seja por causa do seu diâmetro. Acho que está muito grande. Tente diminuí-lo para 15:

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15; 
let raio = diametro / 2;

Obrigado! Mudei o diâmetro para 15, mas infelizmente o erro permanece.

Samuel, eu olhei o seu código e rodei ele no p5.js, e para ele funcionar corretamente você precisa fazer algumas alterações a primeira é na função "verificaColisaoBorda()" nela você esqueceu de considerar o raio da bolinha fazendo com que a mesma ultrapassasse os limites da tela, a segunda alteração é na função "marcaPonto()" que para manter o diâmetro atual da bolinha você precisa redefini o ponto "x" no qual a bolinha marca o ponto ou considerar o raio da bolinha na função assim independente do diâmetro da bolinha a função ira funcionar corretamente.

Primeira alteração :

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

*Segunda alteração *

    function marcaPonto() {
        if (xBolinha > 582) {
            meusPontos += 1;
            ponto.play();
        }
        if (xBolinha < 18) {
            pontosDoOponente += 1;
            ponto.play();
        }

Segunda alteração considerando o raio da bolinha

    function marcaPonto() {
        if (xBolinha + raio > 599) {
            meusPontos += 1;
            ponto.play();
        }
        if (xBolinha - raio < 1) {
            pontosDoOponente += 1;
            ponto.play();
        }
    }

espero ter ajudado, qualquer duvida e só chamar.

Percebi que nessa função estava faltando essas palavras " + raio e - raio ". coloquei elas e começou a marcar 1 em 1 normalmente.

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