Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Código Pong no sublime

<canvas width="600" height="400"></canvas>
<meta charset="UTF-8">

<script>

    var xBola = 300; //coordenada x inicial da bola
    var yBola = 200; //coordenada y inicial da bola
    var sentidoX = 1;
    var sentidoY = 1;

    const larguraRaquete = 10;
    const alturaRaquete = 80;
    const raioCirculo = 7.5;

    var taxaErroRaquete = 0.62;
    var tecla;

    const xRaquete = 5;
    const xRaqueteAdversaria = 585;
    var yRaquete = 160;
    var yRaqueteAdversaria;
    var cima = 38;
    var baixo = 40;

    var velocidadeRaquete = 12;

    var pontos = 0;
    var pontosAdversario = 0;

    var tela = document.querySelector("canvas");
    var pincel = tela.getContext("2d");

    pincel.fillStyle = "black";
    pincel.fillRect(0,0,600,400);

    function desenhaRaquete(xRaquete, y){

        pincel.fillStyle = "white";
        pincel.fillRect(xRaquete, y, larguraRaquete, alturaRaquete);
    }

    function desenhaCirculo(xCirculo, yCirculo){

        pincel.fillStyle = "white";
        pincel.beginPath();
        pincel.arc(xCirculo, yCirculo, raioCirculo, 0, 2 * Math.PI);
        pincel.fill();
    }

    function limpaTela(){

        pincel.clearRect(0, 0, 600, 400);
        pincel.fillStyle = "black";
        pincel.fillRect(0, 0, 600, 400);
    }

    function leDoTeclado(evento){

        tecla = evento.keyCode;

        if(tecla == cima){
            = yRaquete - velocidadeRaquete;
        }else if(tecla == baixo){
            yRaquete = yRaquete + velocidadeRaquete;
        }
    }

    document.onkeydown = leDoTeclado;

    function atualizaTela(){

        limpaTela();

        yRaqueteAdversaria = yBola + (Math.random() - taxaErroRaquete);

        if(xBola > 600){        
            sentidoX = -1;
        }else if(xBola < 0){
            sentidoX = 1
        }

        if(yBola > 400){
            sentidoY = -1;
        }else if(yBola < 0){
            sentidoY = 1;
        }

        if((xBola == xRaquete + larguraRaquete) && (yBola > yRaquete) && (yBola < yRaquete + alturaRaquete)){
            sentidoX = 1;
        }

        if((xBola == xRaqueteAdversaria) && (yBola > yRaqueteAdversaria) && (yBola < yRaqueteAdversaria + alturaRaquete)){
            sentidoX = -1;
        }

        if(yRaquete < 5){
            velocidadeRaquete = 0;
            if(tecla == baixo){
                velocidadeRaquete = 12;
            }
        }else if(yRaquete > 395 - alturaRaquete){
            velocidadeRaquete = 0;
            if(tecla == cima){
                velocidadeRaquete = 12;
            }
        }

        desenhaCirculo(xBola, yBola);

        xBola = xBola + sentidoX;
        yBola = yBola + sentidoY;

        if(xBola == 0){
            pontosAdversario++;
        }

        pincel.font = "50px Georgia";
        pincel.fillStyle = "white";
        pincel.fillText(Math.round(pontosAdversario/2), 400, 75);
        pincel.font = "20px Georgia";
        pincel.fillText("ADVERSARIO", 355, 30);

        if(xBola == 600){
            pontos++;
        }

        pincel.font = "50px Georgia";
        pincel.fillStyle = "white";
        pincel.fillText(Math.round(pontos/2), 200, 75);
        pincel.font = "20px Georgia";
        pincel.fillText("VOCÊ", 190, 30);

        desenhaRaquete(xRaquete, yRaquete); //minha Raquete
        desenhaRaquete(xRaqueteAdversaria, yRaqueteAdversaria); //Raquete adversaria
    }

    setInterval(atualizaTela, 1);

</script>

Fiz o jogo no sublime, porém não adicionei sons. Além disso, o processo para detectar quando eu clico na seta demora muito, isso é por questão de delay no hardware ou tem maneiras de acelerar esse processo?

(Se alguém tiver alguma dica para melhorar, agradeço xD)

1 resposta
solução!

Oi João.

Podemos tentar uma solução de contorno pra ver se melhora. Tente aumentar a velocidade de repetição do seu teclado.

Veja o procedimento aqui: https://www.techtudo.com.br/dicas-e-tutoriais/noticia/2014/06/teclado-repetindo-letras-aprenda-ajustar-o-intervalo-das-teclas.html

Melhora um pouco. Talvez ajude procurar sobre tratamento do delay no onkeydown.