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

Colisão não reconhecida após variaveis

Coloquei as variáveis e a bolinha parou de reconhecer a colisão. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

7 respostas
solução!

E aí Carlos, beleza?

Cara, lendo só esse trecho do código, o problema pode estar nessas variáveis da bolinha ou da raquete. A suas variáveis estão considerando o raio da bolinha e os extremos corretos das raquetes? Pra você ter uma ideia a minha ficou assim:

function colideBolinhaRaquete(){
  if (xBolinha - raioBolinha < xRaquete + larguraRaquete &&
      yBolinha - raioBolinha < yRaquete + alturaRaquete &&
      yBolinha + raioBolinha > yRaquete ){
    xMoveBol *= -1;
    }

Espero ter ajudado. :^)

Olá, no meu caso deu o mesmo problema, após declarar as variáveis

    let direitaBolinha = xBolinha + raio;
    let esquerdaBolinha = xBolinha - raio;
    let superiorBolinha = yBolinha - raio;
    let inferiorBolinha = yBolinha + raio;
    
    let direitaRaquete = xRaquete + raqueteComprimento;
    let superiorRaquete = yRaquete;
    let inferiorRaquete = yRaquete + raqueteAltura;	

E colocar elas no If a colisão simplesmente para de acontecer

function verificaColisaoRaquete() 
{	
    if (esquerdaBolinha < direitaRaquete  // bolinha alcançou a raquete
        && superiorBolinha < inferiorRaquete  // bolinha não está acima da raquete
        && inferiorBolinha > superiorRaquete // bolinha não está abaixo da raquete) 
    {  
        velocidadeXBolinha *= -1;
    }
}

Estou tendo o mesmo problema. Após ter colocado as expressões nas variáveis, a colisão não está sendo reconhecida.

let esquerdaBolinha = xBolinha - raio;
let superiorBolinha = yBolinha - raio;
let inferiorBolinha = yBolinha + raio;
let direitaRaquete = xRaquete + raqueteComprimento;
let superiorRaquete = yRaquete;
let inferiorRaquete = yRaquete + raqueteAltura;
function verificaColisaoRaquete() {
  if (esquerdaBolinha < direitaRaquete &&
      superiorBolinha < inferiorRaquete &&
      inferiorBolinha > superiorRaquete) {
      velocidadeXBolinha *= -1;
  }
}

Fala Pedro, tudo bom?

Já falei com o suporte deles e realmente isso não funciona, pois declaramos a variável no início porem no decorrer do código as variaveis xBolinha e yBolinha se alteram e como é uma declaração por valor e não por referência as variáveis de extensão esquerdaBolinha e as outras não se alteram junto.

Tentei também e não reconhece, as variáveis todas corretas, verifiquei mil vezes. Se não funciona, deviam corrigir essa aula, tive que apagar todas as variáveis e modificações na função refazendo-as.

Eu já estava surtando aqui hahahahah.. li e reli mil vezes, copiei a do professor, refiz e nada. De certo não funciona então né? Devemos permanecer com o

function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete) {velocidadeXBolinha *= -1} }

mesmo, né?

Dando um valor qualquer no inicio para as variaveis e depois colocando uma funcao determinando os pontos dos objetos dentro codigo funciona:

//size Ball
let xBall = 300;
let yBall = 200;
let dBall = 15;
let rBall = dBall / 2;

//speed Ball
let speedBall  = 1;
let speedXBall = speedBall;
let speedYBall = speedBall;

//size Paddle
let xPaddle = 5;
let yPaddle = 155;
let wPaddle = 10;
let hPaddle = 90;

//important Ball points
let leftBall = 0;
let rightBall = 0;
let bottomBall = 0;
let topBall = 0;

//important Paddle points
let rightPaddle = 0;
let topPaddle = 0;
let bottomPaddle = 0;

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

function draw() {
  background(0);
  drawBall();
  moveBall();
  objectsPoints();
  edgeCollision();
  drawPaddle();
  movePaddle();
  paddleCollision();
  
}

function objectsPoints(){

leftBall = xBall - rBall;
rightBall = xBall + rBall;
bottomBall = yBall + rBall;
topBall = yBall - rBall;

rightPaddle = xPaddle + wPaddle;
topPaddle = yPaddle;
bottomPaddle = yPaddle + hPaddle;
}

function drawBall(){
   circle(xBall, yBall, dBall);  
}

function moveBall(){
  xBall += speedXBall;
  yBall += speedYBall;
}

function edgeCollision(){
  if (rightBall > width || leftBall < 0){
    speedXBall *= -1
  }
  if (bottomBall > height || topBall < 0){
    speedYBall *= -1
  }
}

function drawPaddle(){
  rect(xPaddle, yPaddle, wPaddle, hPaddle);
}

function movePaddle(){
  if(keyIsDown(87)){
    yPaddle -= 5;
  }
  if(keyIsDown(83)){
    yPaddle += 5;
  }
}

function paddleCollision(){
  if (leftBall < rightPaddle && topBall < bottomPaddle && bottomBall > topPaddle){
    speedXBall *= -1
  }
}

funcionou corretamente colocando essa funcao apos a funcao que movimenta a bola.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software