3
respostas

Duvida utilizando canvas e funções

Estava testando algumas que vi durantes o cursos de javascript e um pouco mais além tentei fazer um pequeno jogo por prática, queria q desse uma olhada no código. Código abaixo.

<!doctype html>
<html>
    <head>
        <title> tirao </title>
        <meta charset="utf-8">
    </head>

    <body>

        <canvas id="tela" width="600" height="400" style="border: 2px solid black;"></canvas>

        <script>
                var tela = document.getElementById("tela");
                var c = tela.getContext("2d");

                var circulo = function (x, y, raio, cor){
                    c.fillStyle = cor;
                    c.beginPath();
                        c.arc(x, y, raio, 0, 2*3.14);
                        c.fill();
                };

                var desenhaAlvo = function (x, y){
                    circulo (x, y, 30, "red");
                    circulo (x, y, 20, "white");
                    circulo (x, y, 10, "red");

                };

                var limpaTela = function () {
                    c.clearRect(0, 0, 600, 400);
                };

                var sorteia = function (max){
                    return Math.floor(Math.random() * max);
                };

                var desenha = function(){
                    limpaTela();
                    alvoX = sorteia(600);
                    alvoY = sorteia(400);
                    desenhaAlvo(alvoX, alvoY);
                };

                onclick = function (e) {
                    var x = e.pageX - tela.offsetLeft;
                    var y = e.pageY - tela.offsetTop;

                    document.getElementById("posicao").innerHTML = x+","+y;
                    document.getElementById("objeto").innerHTML = alvoX+","+alvoY;

                    if(x == alvoX && y == alvoY){
                        console.log('Acertou');

                    }else{
                        console.log('Erro');
                    }
                };    

                setInterval(desenha, 3000);
        </script>
        <div>Posição do click<p id="posicao"></p></div>

        <div>Objeto<p id="objeto"></p></div>
    </body>
</html>

Eu clico na posição e tenho algumas funções para ficar alterando a posição do objeto, porém a informação de clique é diferente da posição do objeto.

3 respostas

Assim, se você dar um console.log() na variavel X e alvo X e Y e alvo Y vão ver que ela não são iguais, você esta fazendo sua condição

 if(x == alvoX && y == alvoY){
                        console.log('Acertou');

                    }else{
                                        console.log('Erro');
                    }

Fica dificil explicar o problema por aqui por que é mais visual para você entender, mas vamos lá. Você quer que quando o cara clique entra o circulo ele acerte,certo?

Então sua condição deveria ser algo assim

if(x => alvoX && x<= alvoX+larguraDoAlvoX){
}

x é começa da esquerda para a direita logo X é a parte direita da figura se você quiser pegar toda a figura tem que ser a parte inicial que é X e parte final que é X + largura, pegando assim a figura completa. O mesmo pra y que começa de cima para baixo, entao Y é a parte de cima da figura logo pra pegar entre a parte de cima e aparte de baixo precisa ser

if(y => alvoY && Y<= alvoY-alturaDoAlvoY){
}

É mais ou menos isso com o teu if atual o cara tem que clicar na quina superior esquerda pra acertar. Se tu ainda não entendeu me manda um e-mail que eu te explico de uma forma melhor por skype sla kkk

Como você sugere para eu pegar essa largura?

Olha faz algum tempo que não mecho com canvas(alias tenho um livro sobre programação de jogos usando o jquery,html,css, se eu tivesse como dar pra você daria, por que não uso mais). Enfim se fosse um quadrado quando ele é desenhado definimos a altura e largura dele, agora quando um circulo é desenhado não sei se é informado a altura e largura dele, mas não é impossivel, se você determina onde é o X dele e o Y, você pode chutar uma largura e uma altura,creio que esse teu circulo deva ter uns 50px de altura e largura... Mas enfim é esse caminho que tu deve seguir. Te aconselho a quebrar a cabeça de todas as formas possiveis pois assim voce vai aprender do seu jeito e como é melhor fazer ou nao