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

Dúvida na colisão

Oi boa noite galera!

Estaria tendo um problema em cor amarelo aqui no codigo de P5.js que não consigo entender e porem resolver :D

Vou partilhar o código que eu tenho talvez alguem possa me explicar

//Tamaño de la bolita
let xBall = 300;
let yBall = 200;
let diametro = 20;
//Velocidad de la bolita
let xSpeedball = 2
let ySpeedball = 2
let raio = diametro / 2
//Raqueta tamaño y posición
let xRaqueta = 5
let yRaqueta = 150
let anchoraqueta = 8
let largoraqueta = 100

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

function draw() {
  background(0);
  showball()  
  speedball()
  variableball() 
  showraqueta()
  moveraqueta()
  verificaChoqueRaqueta()

}

function showball(){
    circle(xBall,yBall,diametro)
}

function speedball(){
    xBall += xSpeedball
  yBall += ySpeedball
}

function variableball(){
   if (xBall + raio>width||
    xBall - raio <0 ){
    xSpeedball*=-1
  }
  if (yBall + raio>height||
    yBall - raio <0 ){
    ySpeedball*=-1
  }
}
function showraqueta(){
    rect(xRaqueta,yRaqueta,anchoraqueta,largoraqueta)
}
function moveraqueta(){
  if (keyIsDown(UP_ARROW)){
    yRaqueta -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaqueta += 10;
  }
}
  function verificaChoqueRaqueta (){
    if (xBall - raio < xRaqueta + anchoraqueta &&yBall - raio < yRaqueta + largoraqueta &&yBall + raio > yRaqueta + largoraqueta){
      speedball*=-1;
    } 

  }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Então hoje, lendo com mais atenção é que eu vi que usei a função da velocidade da bolinha no lugar do xSpeed que seria o certo para tomar a função.

So que não estou entendendo a lógica, botei a velocidade da bolinha achando que deveria tomar as duas variáveis no eixo X e Y. Mas não, agora ja mudei para xSpeedball e ja esta ejecutando o codigo.

Ou será que deveria usar a variável Y no caso que a raquete estiver encima? Por exemplo se fose um jogo de 4 raquetes ? Ai eu deveria de usar o eixo Y botando ySpeedball como variável a ter em conta , e isso?

Mas a duvida ainda eu tenho ...

solução!

Opa Exequiel, tudo certo?

Que bom que seu código já está executando!

O uso da função speedball no escopo da função verificaChoqueRaqueta não produz o resultado esperado, de fato, pois esse tipo de cálculo com uma função não é um método válido. Quando definimos a função speedball, os argumentos em seu escopo determinam a movimentação da bolinha a partir do incremento contínuo do x e do y (por isso, até seria mais interessante se a função se chamasse moveBall). Ao alterar o valor de uma das variáveis de velocidade da bolinha, alteramos também o retorno dessa função que determina sua movimentação.

Tanto a alteração do x quanto do y da bolinha terão o mesmo resultado nesse caso - de alterar a direção do movimento. A velocidade x foi escolhida para melhor visualizarmos o comportamento da colisão durante a construção da função.

Em programação temos muitas formas de chegar a resultados parecidos, e suas indagações são muito interessantes! É dessa forma que o pensamento lógico e criativo passa a fazer parte do nosso cotidiano.

Espero ter esclarecido suas dúvidas, estou à disposição.

Forte abraço!

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

Muito obrigado Larissa, o seu feedback realmente ajuda muito!!

Estou gostando muito da area toda, não so da programação senão tamben do design e o desenvolvimento que estoy aprendendo com as bases, fundamentos e estrategias de UX

Isto vai me servir muito com certeza, sempre obrigado a Alura !