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

Nunca acertei o código da posição da raquete e agora isso voltou pra me assombrar

Tudo certo?

Quando eu tentei fazer a função movimentaRaqueteOponente seguindo a aula, deveria ser:

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

PORÉM, isso fazia a raquete oponente trancar na parte superior da tela, acompanhando o movimento da bolinha mas travada. Quando eu mudava o código, deixando assim:

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha;
  yRaqueteOponente += velocidadeYOponente
}

a raquete passava a acompanhar a bolinha perfeitamente, entretanto, com esse código, ao tentar inserir a chanceDeErrar:

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha;
  yRaqueteOponente += velocidadeYOponente + chanceDeErrar
calculaChanceDeErrar()
}

function calculaChanceDeErrar(){
  if (pontosOponente > meusPontos){
    chanceDeErrar += 1
    }
  else {
    chanceDeErrar -= 1
  }
}

esse +=1 ou -=1 faz com que a raquete corra pra cima e desapareça.

Meu código inteiro está assim (alguns nomes de variáveis estão diferentes do padrão da aula por gosto, espero que não atrapalhe muito): https://editor.p5js.org/jcqlnkdb/collections/0ywdF9YxG

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

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

//variáveis da raquete
let xRaquete = 5
let yRaquete = 150
let alturaRaquete = 90
let larguraRaquete = 10

//verifica colisao bolinha biblioteca
let colisao = false

//variáveis da raquete oponente
let xRaqueteOponente = 585
let yRaqueteOponente = 150
let velocidadeYRaqueteOponente;

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

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

//chance da raquete oponente errar
let chanceDeErrar = 0;

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

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBordaBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaRaquete()
  //verificaColisaoBolinhaRaquete();
  verificaColisaoBolinhaRaqueteBiblioteca(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  verificaColisaoBolinhaRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente)
  movimentaRaqueteOponente();
  mostraPlacar();
  marcaPontos();
}

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

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

function verificaColisaoBordaBolinha(){
  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, larguraRaquete, alturaRaquete)
}

function movimentaRaquete(){
  if (keyIsDown(UP_ARROW)) {
    yRaquete -= 5;
  }

  if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 5;
  }
}

//function verificaColisaoBolinhaRaquete(){
  //if (xBolinha - raio < xRaquete + larguraRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
    //velocidadeXBolinha *= -1;
  //}
//}

function verificaColisaoBolinhaRaqueteBiblioteca(x,y){
  colisao = collideRectCircle(x, y, larguraRaquete, alturaRaquete, xBolinha, yBolinha, raio);
  if(colisao){
    velocidadeXBolinha *= -1;
    //raquetada.play();
  }
}

function movimentaRaqueteOponente(){
  velocidadeYRaqueteOponente = velocidadeYBolinha;
  yRaqueteOponente += velocidadeYRaqueteOponente + chanceDeErrar
  calculaChanceDeErrar()
}

//function movimentaRaqueteOponente(){
  //if (keyIsDown(87)) {
    //yRaqueteOponente -= 5;
  //}

  //if (keyIsDown(83)) {
    //yRaqueteOponente += 5;
  //}
//}

function mostraPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(color(255, 140, 0));
  rect(130, 10, 40, 25, 3);
  fill(255);
  text(meusPontos, 150, 30);
  fill(color(255, 140, 0));
  rect(430, 10, 40, 25, 3);
  fill(255);
  text(pontosOponente, 450, 30);
}

function marcaPontos(){
  if (xBolinha > 590){
    meusPontos += 1;
    //ponto.play()
  }
  if (xBolinha < 10){
    pontosOponente += 1;
   //ponto.play()
  }
}

function calculaChanceDeErrar(){
  if (pontosOponente > meusPontos){
    chanceDeErrar += 1
    }
  else {
    chanceDeErrar -= 1
  }
}
2 respostas

Não sei se tenho como excluir meu próprio tópico mas resolvi meu problema!

Fui comparar linha por linha meu código com o do instrutor, e percebi que na hora de movimentar a raquete do oponente em vez de colocar o yBolinha, eu colocava a velocidadeYBolinha, ou seja, era assim:


function movimentaRaqueteOponente(){
  velocidadeYRaqueteOponente = **velocidadeYBolinha** - yRaqueteOponente - larguraRaquete / 2 - 30;
  yRaqueteOponente += velocidadeYRaqueteOponente 

quando deveria ser

function movimentaRaqueteOponente(){
  velocidadeYRaqueteOponente = **yBolinha** - yRaqueteOponente - larguraRaquete / 2 - 30;
  yRaqueteOponente += velocidadeYRaqueteOponente 

agora tá tudo certo uhu

solução!

Oi, tudo bem?

Fico feliz que tenha conseguido encontrar onde estava o bug que afetava o seu código e obrigada por compartilhar conosco onde se encontrava. Isso ajudará outros alunos e alunas que estiverem com o mesmo problema.

Recomendo, que caso se sinta confortável em compartilhar seu conhecimento, interagir com outros estudantes, trocar experiências e fazer networking, participe do Discord oficial da Alura de alunas e alunos:

Caso tenha outras dúvidas, estarei à disposição para te ajudar!

Bons estudos e a gente se vê!

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