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

Colisao da raquete oponente sem biblioteca

Oi pessoal, estou tentando fazer a colisao raquete sem a biblioteca, fiz o mesmo processo porem agora a raquete oponente não colide com a bolinha e nem a minha raquete colide mais tambem, podem me ajudar? pfvr

https://editor.p5js.org/mestreyusuke/sketches/5gTBTyHb CODIGO DO JOGO

2 respostas

Olá Gabriel tudo bem com você??

Então fiz um CodeReview e encontrei alguns pontos do por que não estava funcionando sua colisão nas raquetes. O primeiro ponto a ser comentado é atentar para os ";" nos finais dos comandos, isso realmente impede que o código seja executado e acaba passando batido enquanto estamos aprendendo =) Segundo ponto, seria a questão com relação aos nome das variáveis e funções, pois quando erramos nisso, acabamos "quebrando nosso código" e também é bem fácil de passar batido por que geralmente é uma questão de letra maíuscula ou minúscula, a adição de uma letra "s" e por aí vai ^^ Terceiro e último ponto, mas não menos importante, faltou no seu código a função que determina a colisão e ela ser chamada para que o programe funcionasse direitinho. A função que estou falando é a collideRectCircle. Sem ela realmente não seria possível a bolinha tocar nas raquetes, pois ela indica os parâmetros necessários dessa ação.

Segue o código revisado como ficou:

//Variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;

// Velocidade da bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;

// Variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

// Variaveis da raquete oponente
let xRaqueteOponente = 585; 
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

//Função CollideRectCircle
function collideRectCircle (rx, ry, rw, rh, cx, cy, diameter){
var testX = cx;
var testY = cy;

if (cx < rx){testX = rx
            }else if (cx > rx+rw){testX = rx+rw}
  if (cy < ry) {testY = ry}else if (cy > ry+rh){testY = ry+rh}
  var distance = this.dist(cx, cy, testX, testY)
  if (distance <= diameter/2){
    return true;
  }
  return false;
};

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 -= 10;
  }

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

}

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;

}

Se a minha resposta te ajudou, fico muito feliz =D e peço que por favor encerre o Post marcando a dúvida como resolvida! Caso precise de ajuda é só voltar aqui e perguntar.

Obrigado

Victor Gonzalez

solução!

Muito obrigado, me ajudou bastante!!