Hola, les comparto como es que yo hice este ejercicio.
El problema que tengo es que al ejecutar el código de respuesta no hace el cambio de color.
La unica diferencia que hay es que el aumento en el contador para el cambio color y su reinicio lo puse dentro de la función de dibujarCirculo, al ponerlo dentro de la función alterarColor no me funciona.
Mi codigo
<canvas width="600" height="400"> </canvas>
<script>
var pantalla = document.querySelector("canvas");
var pincel = pantalla.getContext("2d");
var colores = ["blue", "red", "green"];
var contadorColores = 0;
pincel.fillStyle = "grey";
pincel.fillRect(0,0,600,400);
function dibujarCirculo(evento){
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
pincel.fillStyle = colores[contadorColores];
pincel.beginPath();
pincel.arc(x,y,10,0,2*3.14);
pincel.fill();
console.log(x + "," + y);
contadorColores++;
if(contadorColores == colores.length){
contadorColores=0;
}
}
pantalla.onclick = dibujarCirculo;
function alterarColor() {
alert("Funcionó");
return false;
}
pantalla.oncontextmenu = alterarColor;
</script>
La respuesta que dan en el curso
<canvas width="600" height="400"> </canvas>
<script>
var pantalla = document.querySelector("canvas");
var pincel = pantalla.getContext("2d");
pincel.fillStyle = "grey";
pincel.fillRect(0,0,600,400);
var colores = ["blue", "red", "green"];
var indiceColorActual = 0; // comienza con blue
function dibujarCirculo(evento){
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
pincel.fillStyle = colores[indiceColorActual];
pincel.beginPath();
pincel.arc(x,y,10,0,2*3.14);
pincel.fill();
console.log(x + "," + y);
}
pantalla.onclick = dibujarCirculo;
function alterarColor() {
indiceColorActual++;
if(indiceColorActual>= colores.length) {
indiceColorActual = 0; //vuelve para el primer color, blue
}
return false; //menú contextual padrón de `canvas` no sea exhibido
}
pantalla.oncontextmenu = alterarColor;
</script>