fica aí o código com duas raquetes, uma movida pelas teclas W e S e a outra pelas setas pra cima/baixo. ainda me incomoda que tem a possibilidade da bolinha ficar presa entre a raquete e a borda, ricocheteando várias vezes antes de voltar a atravessar a tela.. alguma dica de como evitar esse bug?
//tamanhos e medidas
//bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 22;
let raio = diametro / 2;
//raquetes
let alturaRaquetes = 75;
let larguraRaquetes = 10;
let xRaqueteEsquerda = 10;
let yRaqueteEsquerda = 162;
let xRaqueteDireita = 580;
let yRaqueteDireita = 162;
//movimento
//bolinha
let velocidadeXbolinha = 8;
let velocidadeYbolinha = 6;
let colidiu = false;
//raquetes
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
mostraRaquetes();
mostraBolinha();
moveBolinha();
moveRaqueteEsquerda();
moveRaqueteDireita();
//verificaColisaoRaquete();
verificaColisaoRaqueteEsquerda();
verificaColisaoRaqueteDireita();
}
function mostraBolinha(){
circle(xBolinha,yBolinha,diametro);
}
function mostraRaquetes(){
rect(xRaqueteEsquerda, yRaqueteEsquerda, larguraRaquetes, alturaRaquetes);
rect(xRaqueteDireita, yRaqueteDireita, larguraRaquetes, alturaRaquetes);
}
function moveBolinha(){
xBolinha += velocidadeXbolinha;
yBolinha += velocidadeYbolinha;
if (xBolinha + raio > width ||
xBolinha - raio < 0 ){
velocidadeXbolinha *= -1;
}
if (yBolinha + raio > height ||
yBolinha - raio <0){
velocidadeYbolinha *= -1;
}
}
function moveRaqueteEsquerda(){
if (keyIsDown(87)){ //TECLA W
yRaqueteEsquerda -= 10;
}
if (keyIsDown(83)){ //TECLA Sw
yRaqueteEsquerda += 10;
}
if (yRaqueteEsquerda < 0){
yRaqueteEsquerda = 0;
}
if (yRaqueteEsquerda > height - alturaRaquetes){
yRaqueteEsquerda = height - alturaRaquetes;
}
}
function moveRaqueteDireita(){
if (keyIsDown(UP_ARROW)){
yRaqueteDireita -= 10;
}
if (keyIsDown(DOWN_ARROW)){
yRaqueteDireita += 10;
}
if (yRaqueteDireita < 0){
yRaqueteDireita = 0;
}
if (yRaqueteDireita > height - alturaRaquetes){
yRaqueteDireita = height - alturaRaquetes;
}
}
function verificaColisaoRaquete(){
//raquete esquerda
if (xBolinha - raio < xRaqueteEsquerda + larguraRaquetes &&
yBolinha + raio > yRaqueteEsquerda &&
yBolinha - raio < yRaqueteEsquerda + alturaRaquetes){
velocidadeXbolinha *= -1;
}
//raquete direita
if (xBolinha + raio > xRaqueteDireita &&
yBolinha + raio > yRaqueteDireita &&
yBolinha - raio < yRaqueteDireita + alturaRaquetes){
velocidadeXbolinha *= -1;
}
}
function verificaColisaoRaqueteEsquerda(){
colidiu = collideRectCircle(xRaqueteEsquerda, yRaqueteEsquerda, larguraRaquetes, alturaRaquetes, xBolinha, yBolinha, raio);
if (colidiu){
velocidadeXbolinha *= -1;
}
}
function verificaColisaoRaqueteDireita(){
colidiu = collideRectCircle(xRaqueteDireita, yRaqueteDireita, larguraRaquetes, alturaRaquetes, xBolinha, yBolinha, raio);
if (colidiu){
velocidadeXbolinha *= -1;
}
}