2
respostas

a Bolinha em certa posição na parte acima do eixo Y está ultrapassando comprimento da raquete

A bolinha quando acerta a raquete do oponente na metade de cima do cenário, está ultrapassando a raquete do oponente.

Conforme as imagens abaixo, na primeira identifiquei mais ou menos a área onde a bolinha foge da regra de colisão e na outra imagem um print dela ultra passando a raquete naquela área.

Código

<script>
    //Variaveis da Bola
    let xBola = 300;
    let yBola = 200;
    let diametroBola = 25;
    let raioBola = diametroBola/2;
    //Velocidade da bola
    let velocidadeXBola = 6;
    let velocidadeYBola = 6;

    //variáveis da raquete
    let xRaquete = 5;
    let yRaquete = 150;
    let raqueteComprimento = 10;
    let raqueteAltura = 90;

    //variáveis do oponente
    let xRaqueteOponente = 585;
    let yRaqueteOponente = 150;
    let velocidadeYOponente;

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

    function draw() {
        background(0);
        mostraBola();
        movimentaBola();
        verificaColisaoBorda();
        mostraRaquete(xRaquete, yRaquete);
        movimentaRaquete();
        verificaColisaoRaquete();
        mostraRaquete(xRaqueteOponente, yRaqueteOponente);
        movimentaRaqueteOponente();
        verificaColisaoRaqueteOponente()
    }

    function mostraBola (){
        circle (xBola, yBola, diametroBola);
    }

    function movimentaBola (){
        xBola += velocidadeXBola;
        yBola += velocidadeYBola;
    }

    function verificaColisaoBorda (){
        if (xBola + raioBola > width || xBola - raioBola < 0){
            velocidadeXBola *= -1;
        } else if (yBola + raioBola > height || yBola - raioBola < 0){
            velocidadeYBola *= -1;
        }
    }

    function mostraRaquete (x, y){
        rect(x, y, raqueteComprimento, raqueteAltura);
    }

    function movimentaRaquete (){
        if (keyIsDown(UP_ARROW)){
            yRaquete -= 10;
        } else if (keyIsDown (DOWN_ARROW)){
            yRaquete +=10;
        }
    }

    function verificaColisaoRaquete(){
        if (xBola - raioBola < xRaquete + raqueteComprimento 
            && yBola - raioBola < yRaquete + raqueteAltura 
            && yBola + raioBola > yRaquete){
                velocidadeXBola *=-1;
            }
    }

    function movimentaRaqueteOponente(){
        velocidadeYOponente = yBola - yRaqueteOponente - raqueteComprimento / 2 - 30;
        yRaqueteOponente += velocidadeYOponente
    }

    function verificaColisaoRaqueteOponente() {
        if (xBola + raioBola > xRaqueteOponente + raqueteComprimento &&
            yBola + raioBola < yRaqueteOponente + raqueteAltura  &&
            yBola + raioBola > yRaquete) {
            velocidadeXBola *= -1;
        }
    }

</script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>

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

2 respostas

o erro pode estar no uso do " else if" em vez do "if" no codigo? tenta mudar pra ver se dar certo.

function verificacolisaoborda() { if (xBolinha + raio > width || xBolinha - raio < 0) { velocidadeXBolinha *= -1; } if (yBolinha + raio > height || yBolinha - raio < 0) {velocidadeYBolinha *= -1; } }

ou observa o codigo do "verifica colisão raquete do oponente"

function colisaoRaqueteOponenteBiblioteca() { colidiu = collideRectCircle(xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); if (colidiu){ velocidadeXBolinha *= -1; } }