1
resposta

Bug com Colisão Oponente

Olá; Na colisão oponente optei por utilizar o modelo ensinado ao invés do modelo da livraria. Mas quando coloco o código da colisão oponente gera um bug no movimento da bolinha. Alguém pode me ajudar?

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 20;
let raio = diametroBolinha / 2;

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


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

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

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

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

function draw() {
    background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBordas();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaMinhaRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  incluiPlacar();
  movimentaRaqueteOponente();
  verificaColisaoRaqueteOponente();


 }

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

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

}

function verificaColisaoBordas() {

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

      }
}

function mostraRaquete(x, y) {
  rect(x, y, larguraRaquete, comprimentoRaquete);

}


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

function verificaColisaoRaquete(x, y) {
 if(xBolinha - raio < x + larguraRaquete && yBolinha - raio < y + comprimentoRaquete && yBolinha + raio > y) {
   velocidadeXBolinha *= -1;

 }

  }
function verificaColisaoRaqueteOponente() {
  if(xBolinha - raio < xRaqueteOponente + larguraRaquete && yBolinha - raio < yRaqueteOponente + comprimentoRaquete && yBolinha + raio > yRaqueteOponente) {
    velocidadeXBolinha *= -1;
  }
}


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

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

}
1 resposta

Oi oi, Robson. Tudo bem com você?

A verificaColisãoRaqueteOponente() sem a biblioteca não funcionou porque você está utilizando a mesma lógica aplicada ao lado esquerdo da tela. Para funcionar precisamos alterar um pouco a lógica para que faça referência ao outro lado, o lado do oponente.

Vou deixar um exemplo do código para você testar:

function verificaColisaoRaqueteOponente(){
  if (xBolinha + raio > xRaqueteOponente && yBolinha + raio > yRaqueteOponente && yBolinha - raio < yRaqueteOponente + comprimentoRaquete){
    velocidadeXBolinha *= -1;
  }
}

É importante também aprendermos a consumir a biblioteca, pois isso facilita bastante o dia-a-dia do desenvolvedor :). No entanto, continue buscando novas formas de solucionar os problemas, pois assim você irá consolidadar seus aprendizados.

Vou deixar também o link para o tópico de uma aluna que pensou numa solução sem a a biblioteca também: Link para desafio do pong sem a biblioteca

Espero que as informações tenham ajudado você, fico à disposição!

Um grande abraço e bons estudos!!!

Caso este post tenha lhe ajudado, por favor, marcar como solução ✓.Bons Estudos!