Solucionado (ver solução)
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!!