1
resposta

Minha raquete não colide em velocidades altas

Olá, quando coloco na velocidade 1 minha raquete reconhece a colisão, mas quando coloco na 6, não colide na raquete; segue código.

//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; 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;

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

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

}

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

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); }

function mostraRaqueteOponente (){ rect(xRaqueteOponente, yRaqueteOponente, 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; } }

function VerificaColisaoRaquete(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 marcarPonto(){ if (xBolinha > 590){ meuspontos += 1; } if (xBolinha < 10){ pontosDoOponente += 1; } }

1 resposta

Oi, Chrystian. Tudo bem com você?

Analisei seu código e pude observar que o conflito estava sendo gerado devido ao fato de você ter chamado duas vezes a função para verificar colisão da raquete. Uma com a solução do collide e a outra sem a biblioteca, provavelmente foi isso que causou o problema no seu jogo. Vou deixar o código para você analisar, a única coisa que modifiquei foi deixar a função verificaColisaoRaquete() comentada.

///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; 
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;

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

function draw() { 
  background(0); 
  mostraBolinha(); 
  movimentaBolinha(); 
  verificaColisaoBorda(); 
  mostraRaquete(xRaquete, yRaquete); 
  movimentaMinhaRaquete(); 
  //verificaColisaoRaquete(); bem aqui, deixei em comentário e funcionou
  VerificaColisaoRaquete(xRaquete, yRaquete); 
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente(); 
  VerificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); 
  incluiPlacar(); 
  marcarPonto();

}

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

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); }

function mostraRaqueteOponente (){ rect(xRaqueteOponente, yRaqueteOponente, 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; } }

function VerificaColisaoRaquete(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 marcarPonto(){ 
  if (xBolinha > 590){
    meuspontos += 1; 
  } 
  if (xBolinha < 10){ 
    pontosDoOponente += 1; 
  } }

Uma outra sugestão bacana é utilizar o botão "inserir bloco de código" aqui na caixa de formatação do fórum. O seu código irá aparecer como o que eu copiei e colei aqui, o que facilita bastante na hora de fazer uma verificação do projeto.

Continue compartilhando seu progresso e suas dúvidas conosco!

Desejo tudo de bom e um excelente estudo!