Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ajuda, por favor!

Já não consigo mais, na colisão raquete, já substituir por x e y e nada adiantou...enfim, aguardando uma luz, pois modifiquei tanto esse código que já fiquei perdido

//jogo Pong

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

//variáveis de velocidade da bolinha
let veloXbolinha = 2;
let veloYbolinha = 2;

//variáveis da raquete1
let xRaquete1 = 5;
let yRaquete1 = 150;
let wRaquete = 10; //comprimento
let hRaquete = 90;  //largura

//variáveis da raquete2
let xRaquete2 = 585;
let yRaquete2 = 150;

let velocidadeYraquete2;

let colidiu = false;

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


function draw() {

  background(0);

  mostraBolinha();
  movimentaBolinha();

  colisaoBorda();
  colisaoRaquete(xRaquete1, yRaquete1);

  mostraRaquete(xRaquete1, yRaquete1);
  mostraRaquete(xRaquete2, yRaquete2);

  movimentaMinhaRaquete();
  movimentaRaquete2();


}


function mostraBolinha(){

  circle(xBolinha, yBolinha, diametro);

}


function movimentaBolinha(){

    xBolinha += veloXbolinha;
    //yBolinha += veloYbolinha;

}

function mostraRaquete(x,y){
  rect(x, y, wRaquete, hRaquete);

}

function colisaoMinhaRaqueteBiblioteca() {
    collideRectCircle(200, 200, 100, 150, mouseX, mouseY, 100);
}

function verificaColisaoRaquete(x, y) {
    colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio);
    if (colidiu) {
        velocidadeXbolinha *= -1;
    }
}

function movimentaMinhaRaquete() {

  if (keyIsDown(UP_ARROW)) {
        yRaquete1 -= 10;
    }
    if (keyIsDown(DOWN_ARROW)) {
        yRaquete1 += 10;
    }
}


function colisaoBorda(){

    if(xBolinha + raio > width || xBolinha - raio < 0){
      veloXbolinha *= -1; 
      }

    if(yBolinha + raio > height || yBolinha - raio < 0){
      veloYbolinha *= -1;
      }
}

function colisaoRaquete(x, y) {
                                      //w comprimento da raquete
                                      //h largura da raquete
    if (xBolinha - raio < x + wRaquete
        && yBolinha - raio < y + hRaquete
        && yBolinha + raio > y) {
        veloXbolinha *= -1;
    }
}


function movimentaRaquete2(x, y) {

  velocidadeYraquete2 = yBolinha - yRaquete2 - wRaquete / 2 - 50
  y += velocidadeYraquete2
}

1 resposta
solução!

Olá amigo , vamos lá verifiquei o seu código e reparei algo interessante: Vamos ponto por ponto

function verificaColisaoRaquete(x, y) { colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio); if (colidiu) { velocidadeXbolinha = -1; } } *A variável (velocidadeXbolinha ) esta errada, pois no seu caso você utilizou a veloXbolinha para determinar a velocidade x da bolinha, como pode reparar**

//variáveis de velocidade da bolinha let veloXbolinha = 2; let veloYbolinha = 2;

Segundo ponto:

function verificaColisaoRaquete(x, y) { colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio); if (colidiu) { velocidadeXbolinha *= -1; } }

Sua função esta correta mas você não colocou a function, dentro da Função Draw, portanto sem isso ela não ira funcionar nunca.

Após colocar o VerificaColisaoRaquete dentro do Draw, você vai, passar os parametros x e y da raquete do oponente que no seu caso e

xRaquete2 e yRaquete2

Você pode apagar também a function:

function colisaoMinhaRaqueteBiblioteca() { collideRectCircle(200, 200, 100, 150, mouseX, mouseY, 100); } Como você não passou nenhum dos seus valores para ela e também não colocou ela dentro da função draw, ela não e necessária. Acredito que nessa parte você se confundiu, quando você pega um código do GitHub, ele e pra você ter uma noção do que e necessário fazer, quando você coloca ele dentro do seu código você tem que colocar suas informações, como suas variáveis, etc.


Notei tambem que sua Raquete do Oponente não esta se movimentando:

function movimentaRaquete2(x, y) {

velocidadeYraquete2 = yBolinha - yRaquete2 - wRaquete / 2 - 50 y += velocidadeYraquete2

yRaquete2 += velocidadeYraquete2

}

A function esta mais ou menos correta, você tem que pegar o yRaquete2 e passar para ela o movimento que você criou no velocidadeYraquete2, esse que grifei acima junto com a function , pois sem isso a yRaquete2 continua com o mesmo valor sempre, portanto ela não se movimenta.

Importante : Sempre que você passar o valor x, y, ou qualquer outra letra você precisa colocar o parâmetro nela, porque se não você vai ficar enchendo o seu código sem necessidade. Por exemplo nessa function acima :

function movimentaRaquete2(x, y), não era necessário colocar esses valores, por que você não deu nenhum parâmetro para a function dentro do draw como podemos ver : movimentaRaquete2();

Ela esta dentro do function draw desta maneira, portanto pode apagar os y e x dela ela ficara assim:

function movimentaRaquete2() {

velocidadeYraquete2 = yBolinha - yRaquete2 - wRaquete / 2 - 30 yRaquete2 += velocidadeYraquete2 }


Importante: Lembre-se também de fazer upload do arquivo do p5.collide2d.js, e após isso colocar ele dentro do index, igual o instrutor fez.

Pode ter ficado confusa a explicação, mas te dou uma dica, coloque nomes de variáveis o mais fácil possível de identificar, porque se não até você mesmo se perde no seu código, e acaba tendo que começar do zero ,espero ter ajudado.

Abraço