1
resposta

Ideias para adicionar novos recursos ao código (se possível) e feedback

Com certeza está com a estrutura bagunçada mas adoraria saber se é possível aplicar conceitos como o "Ctrl + Z" ou 2 canvas (pra pintar sem interferência nas cores da animação), aplicar layers e etc. É possível adicionar mais sem fugir muito do Javascript bruto ?

<meta charset="UTF-8">
<canvas width="1500" height="700"> </canvas>
<br>
<b>Pressione Shift para acessar a borracha.</b> Para voltar basta selecionar a cor novamente. <b>|||</b> <input type="color" name="inputcor" id="ipc"> <button> Troque a cor ! </button>
<br>
<button type="button" name="Trocar o tamanho do pincel/borracha" id="botão2">Trocar o tamanho do pincel </button>

<script>

var nome = prompt("Olá ! qual seu nome ?");
var perguntatamanho = prompt("Bem-vindo " + nome + ", Qual será o tamanho do seu pincel ? (Recomendado de 5 a 50)");
var input = document.querySelector("ipc");
var button = document.querySelector("button");
var input2 = document.querySelector("input");
var tela = document.querySelector("canvas");
var pincel = tela.getContext("2d");
var pincel2 = tela.getContext("2d");
var shift = 16;
var button2 = document.querySelector("[id=botão2]")

    function contorno1() {
    pincel.strokeStyle = "purple";
    pincel.strokeRect(0,0,1000,700);
    pincel.strokeStyle = "purple";
    pincel.strokeRect(0,0,1000,700) }

contorno1();

    function decidecor() {
    pincel.fillStyle = ipc.value} 

    function circulo(evt) {
    var x = evt.pageX;
    var y = evt.pageY;
    var c = perguntatamanho;

        function novo() {
        var p = prompt("Qual o valor do seu novo pincel ?");
        perguntatamanho = p; }

            if(desenha) {
            button.onclick = decidecor;
            button2.onclick = novo;
            pincel.beginPath();
            pincel.arc(x,y,c, 0, 2 * Math.PI);
            pincel.fill(); } } 
    tela.onmousemove = circulo;

    function h() {
    desenha = true; }

    function d() {
    desenha = false; }

    function apaga(evt3) {
    if(evt3.keyCode == shift) {
    pincel.fillStyle = "white"; } }

document.onkeydown = apaga;

tela.onmousedown = h;
tela.onmouseup = d ;

var o = -100;

    function fazbola(t,o) {
    pincel.beginPath();
    pincel.arc(t, o, 20, 0, 2 * Math.PI);
    pincel.fill(); }

fazbola(1050,o);
fazbola(1075,o);
fazbola(1100,o);
fazbola(1125,o);

function anima4() {
fazbola(1125,o);
o++;
if(o > 750) {
o = -100 } }

function anima3() {
fazbola(1100,o);
o++;
if(o > 750) {
o = -100 } }

function anima2() {
fazbola(1075,o);
o++;
if(o > 750) {
o = -100 } }

function anima() {
fazbola(1050,o);
o++; 
if(o > 750) {
o = -100 } } 

setInterval(anima,5);
setInterval(anima2,500);
setInterval(anima3,500);
setInterval(anima4,20);

</script>
1 resposta

Matheus,

tá bem bagunçado. Precisa organizar primeiro.

A function novo() está dentro da function circulo(evt), o que está errado. Funciona mas não deveria.

A variável desenha é usada em 3 funções, e não está declarada em nenhum lugar.

Precisa pesquisar melhor esta questão de dois canvas.

Poderia seguir a boa prática de nomear variáveis e funções seguindo o padrão camelCase, com letra maiúscula no início dos nomes compostos.

Pode mudar a escolha de cor pra não precisar clicar em um botão, mas já mudar a cor só de escolher.

Pode elaborar um slider pra escolher o diâmetro do pincel.


Bons estudos.