Solucionado (ver solução)

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!

Solucionado
(ver solução)
10
respostas

[Dúvida] Raquete e raquete do oponente não reconhece mais a colisão

Boa noite.

a bolinha estava colidindo com a raquete, mas após a criação da raquete do oponente e das funções x,y o reconhecimento da colisão da bolinha com as raquetes nao aconteceu maid. o que pode ser?

vou deixar meu código aqui:

https://editor.p5js.org/Luis87/full/tocsX7Fqo
10 respostas

Mande as linha de código por favor.

Oi Luis! Já havia visto seu código qd você teve problema com a colisão em uma raquete só. Olha só, você usou:

let esquerdaBolinha = xBolinha - raio; isso para a colisão na esquerda, e quer que xBolinha - raio funcione para a direita, onde deveria somar? Quando a bolinha for colidir na direita vc terá que fazer(acredito eu...):

let direitaBolinha = xBolinha + raio ; porque para a direita o X da bolinha tem que somar com o raio.

Acredito que essa seria a lógica, tens que criar tanto Bolinha quanto Raquete para os quatro cantos, superior e inferior, esquerda e direita. Isso pra substituir este código: xBolinha - raio < xRaquete + raqueteComprimento&&......

que seria algo assim, considerando o seu código: esquerdaBolinha < direitaRaquete.....&& Porém vou deixar para o pessoal que tem experiência kkk, isso foi s uma opinião. Vai ser interessante e vou acompanhar o post. Boa sorte e bons estudos.

Esse é o meu código. Não está reconhecendo a colisão com a minha raquete nem com a raquete do oponente //variáveis da bolinha let xBolinha = 300; let yBolinha = 170; let diametro = 15;

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raio = diametro / 2;

//variáveis da raquete let xRaquete = 5; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90;

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

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

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); } 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 movimentaMinhaRaquete() { if (keyIsDown(UP_ARROW) && yRaquete > 0) { yRaquete -= 10; }

if (keyIsDown(DOWN_ARROW) && yRaquete + raqueteAltura < height) { yRaquete += 10; } }

function verificaColisaoRaquete(x,y){ let esquerdaBolinha = xBolinha - raio; let superiorBolinha = yBolinha - raio; let inferiorBolinha = yBolinha + raio;

let direitaRaquete = xRaquete + raqueteComprimento;
let superiorRaquete = yRaquete;
let inferiorRaquete = yRaquete + raqueteAltura;	

if (esquerdaBolinha < direitaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){
    velocidadeXBolinha *= -1;  
}

}

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

oi, eu já havia visto seu código, pelo link q colocou acima. Com base no que vi, eu disse o que está acima. Sua ideia parece muito boa e facilita escrever o código, mas para usar nas duas raquetes, não vai dar certo, tens mesmo que fazer para os dois lados, acredito eu. Mas pra começo de de estudos, eu sugiro o feijão com arroz, se é que me entende. Talvez esteja indo por um caminho muito difícil neste momento de aprendizagem. Esse serve para uma raquete. Mas já está dando nó...

//variáveis da bolinha
let xBolinha = 300; 
let yBolinha = 170; 
let diametro = 20;

//velocidade da bolinha 
let velocidadeXBolinha = 4;
let velocidadeYBolinha = 4; 
let raio = diametro / 2;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150; 
let raqueteComprimento = 10;
let raqueteAltura = 90

let esquerdaBolinha = (xBolinha - raio); 
let superiorBolinha = (yBolinha - raio); 
let inferiorBolinha = (yBolinha + raio);

let direitaRaquete = (xRaquete + raqueteComprimento); 
let superiorRaquete =(yRaquete - raqueteAltura); 
let inferiorRaquete =(yRaquete + raqueteAltura);

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete();
  movimentaMinhaRaquete(); 
  verificaColisaoRaquete();
}
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(){
  rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura );

}

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

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

function verificaColisaoRaquete(){
  esquerdaBolinha = xBolinha - raio; 
  superiorBolinha = yBolinha - raio; 
  inferiorBolinha = yBolinha + raio;

  direitaRaquete = xRaquete + raqueteComprimento; 
  superiorRaquete = yRaquete - raqueteAltura; 
  inferiorRaquete = yRaquete + raqueteAltura;

  if (esquerdaBolinha < direitaRaquete &&
      superiorBolinha < inferiorRaquete &&
      inferiorBolinha > superiorRaquete) { 
    velocidadeXBolinha *= -1;
  }
}

oi, esse foi com muita ajuda.

https://editor.p5js.org/oromeu/sketches/upjqnghj8

bons estudos.

Obrigado pela ajuda Romeu.

Agora está reconhecendo a colisão com minha raquete porém ainda não reconhece a colisão com a raquete do oponente....

veja aqui: Você está com algum erro no código, posta ele.

solução!

//variáveis da bolinha let xBolinha = 300; let yBolinha = 170; let diametro = 15;

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raio = diametro / 2;

//variáveis da raquete let xRaquete = 5; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90;

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

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

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); } 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 movimentaMinhaRaquete() { if (keyIsDown(UP_ARROW) && yRaquete > 0) { yRaquete -= 10; }

if (keyIsDown(DOWN_ARROW) && yRaquete + raqueteAltura < height) { yRaquete += 10; } }

function verificaColisaoRaquete(x,y){ let esquerdaBolinha = xBolinha - raio; let direitaBolinha = xBolinha + raio; let superiorBolinha = yBolinha - raio; let inferiorBolinha = yBolinha + raio;

let direitaRaquete = xRaquete + raqueteComprimento;
let superiorRaquete = y;
let inferiorRaquete = yRaquete + raqueteAltura;
let esquerdaRaquete = x;

if (direitaBolinha > esquerdaRaquete && esquerdaBolinha < direitaRaquete && inferiorBolinha > superiorRaquete && superiorBolinha < inferiorRaquete) { velocidadeXBolinha *= -1; } }

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

Bom dia! Finalmente encontrei o erro. Agora foi solucionado! Obrigado aos que buscaram me ajudar!!