2
respostas

o meu oponente. a minha bolinha não esta colidindo com a raquete do oponente

//variédade da bolinha
let xbolinha = 400;
let ybolinha = 200;
let diametro = 20;


// velocidade da bolinha
let velocidadexbolinha = 6;
let velocidadeybolinha = 6;
let raio = diametro /2

let colidiu = false

// Variaves da raquete direiro
let xdaraquete = 5
let ydaraquete = 150
let largura = 10
let altura = 90
let arredondamento = 10

// Variavel da raquete esquerda
let xraquete = 578
let yraquete = 150
let velocidadeyraquete;

// placar de pontos

let meuspontos = 0
let pontosdooponente = 0


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



}

function draw() {

  background(0);
  mostrarbolinha();
  movimentabolinha();
  verificacolisao();
  raqueteladodireito(xdaraquete, ydaraquete);
  raqueteladodireito(xraquete, yraquete);
  movimentação();
  verificaColiraque ();
  verificacolisaoraquete(yraquete, xraquete);
  movimentacaoraqueteesquerdo();
  verificacolisaoraquete(yraquete, xraquete)
  placardepontos ();
  marcaPonto ()


}

function mostrarbolinha () {
  circle (xbolinha, ybolinha, diametro)
}

function movimentabolinha () {
  xbolinha += velocidadexbolinha;
  ybolinha += velocidadeybolinha;
}

function verificacolisao () {
   if(xbolinha + raio > width || xbolinha - raio < 0) {
    velocidadexbolinha *= -1;
  }

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

}

function raqueteladodireito (x, y) {
  rect (x,y, largura, altura, arredondamento)

}


function movimentação () {
  if( keyIsDown (UP_ARROW) ) {
  ydaraquete -= 10}
if( keyIsDown (DOWN_ARROW) ) {
  ydaraquete += 10}
}


 function verificaColiraque () {
  if (xbolinha - raio < xdaraquete + largura
     && ybolinha - raio < ydaraquete + altura && ybolinha + raio > ydaraquete) {
    velocidadexbolinha *= -1;
  }
 }


function verificacolisaoraquete (x, y) {
  colidiu = 
    collideRectCircle (x, y, largura, altura, xbolinha, ybolinha, raio)
  if (colidiu) {
    velocidadexbolinha *= -1;
    }
  }



function movimentacaoraqueteesquerdo() {
    velocidadeyraquete = ybolinha -yraquete -altura /5 -30
    yraquete += velocidadeyraquete
}

function placardepontos () {
  fill (255)
text (meuspontos, 250, 26)
text (pontosdooponente, 330, 26)
}

function marcaPonto() {
    if (xbolinha > 590) {
        meuspontos += 1;
    }
    if (xbolinha < 10) {
        pontosdooponente += 1;
    }
}
2 respostas

se alguém poder me ajudar a saber o que eu errei!

Olá, Roberto, tudo bem?

Analisei o seu código e identifiquei alguns erros que está gerando esse comportamento.

Ao chamar a função verificacolisaoraquete na função draw() você troca as posições dos argumentos, passando o x no lugar do y, e o y no lugar do x. É imprescindível passar as posições corretamente, pois no código da função haverá instruções diferentes para cada uma delas.

Além disso, você chama a função duas vezes com os mesmos argumentos (yraquete, xraquete). O correto é chamar a função duas vezes e em cada chamada com argumentos correspondentes ao x e y da raquete do jogador e o x e y da raquete do oponente.

O chamada da função verificacolisaoraquete na função draw() ficará assim:

verificacolisaoraquete(xdaraquete, ydaraquete);
verificacolisaoraquete(xraquete, yraquete);

Por fim, como você optou utilizar a biblioteca do p5 para verificar a colisão da bolinha com a raquete, é necessário comentar o código antigo responsável pelo mesmo comportamento, mas que não utiliza a biblioteca na função draw(), ou até mesmo apagar. No seu programa é a função verificaColiraque().

Na função draw, o comentário do código ficará asssim:

//verificaColiraque ();

Espero ter ajudado.

Caso surja dúvidas, estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!