En el presente artículo veremos dos nuevas funciones útiles en la creación de caminos, que son closePath(), para cerrar un camino y stroke(), para dibujar el camino realizado mediante una línea. Las dos funciones, como cualquier otra función de dibujo en el lienzo de canvas, son métodos del objeto contexto del canvas, que se debe obtener a partir del elemento canvas con las correspondientes funciones de Javascript, tal como vimos anteriormente en este manual. Veremos estas nuevas funciones para dibujo de caminos con un ejemplo, pero antes podemos explicarlas detalladamente.
ctx.beginPath();
ctx.moveTo(1,1);
for (i=1;i<100;i+=5){
if((i%2)!=0){
ctx.lineTo(i+5,i);
}else{
ctx.lineTo(i,i+5);
}
}
ctx.lineTo(1,i);
ctx.closePath();
ctx.stroke();
En el script comenzamos el camino con beginPath(), luego con moveTo(1,1) nos situamos en el punto donde deseamos comenzar el dibujo. A continuación realizamos un bucle for para dibujar diversas líneas en diversas coordenadas.
Acabamos haciendo una última línea con lineTo() y después un closePath() para que se dibuje una línea final hasta el punto de inicio del camino, que cerrará la silueta realizada. Con stroke() hacemos que se dibuje una línea pasando por todos los segmentos que completan el camino dibujado.
Este ejemplo podemos verlo en una página aparte.
El dibujo anterior lo hemos realizado con un código como el que sigue:
ctx.beginPath();
ctx.moveTo(1,1);
for (i=1;i<100;i+=5){
if((i%2)!=0){
ctx.lineTo(i+5,i);
}else{
ctx.moveTo(i,i+5);
}
}
ctx.stroke();
<html>
<head>
<title>Canvas Caminos con stroke</title>
<script>
//Recibe un identificador del elemento canvas y carga el canvas
//Devueve el contexto del canvas o FALSE si no ha podido conseguise
function cargaContextoCanvas(idCanvas){
var elemento = document.getElementById(idCanvas);
if(elemento && elemento.getContext){
var contexto = elemento.getContext('2d');
if(contexto){
return contexto;
}
}
return false;
}
window.onload = function(){
//Recibimos el elemento canvas
var ctx = cargaContextoCanvas('micanvas');
if(ctx){
ctx.beginPath();
ctx.moveTo(1,1);
for (i=1;i<100;i+=5){
if((i%2)!=0){
ctx.lineTo(i+5,i);
}else{
ctx.lineTo(i,i+5);
}
}
ctx.lineTo(1,i);
ctx.closePath();
ctx.stroke();
}
//otro ejemplo basado en el mismo código
var ctx = cargaContextoCanvas('micanvas2');
if(ctx){
ctx.beginPath();
ctx.moveTo(1,1);
for (i=1;i<100;i+=5){
if((i%2)!=0){
ctx.lineTo(i+5,i);
}else{
ctx.moveTo(i,i+5);
}
}
ctx.stroke();
}
}
</script>
</head>
<body>
<canvas id="micanvas" width="150" height="150">
Recicla tu browser, POR FAVOR!!
</canvas>
<br>
<br>
<canvas id="micanvas2" width="150" height="150">
POR FAVOR, Recicla tu navegador!!
</canvas>
</body>
</html>
Podemos acceder a una página con el ejemplo en funcionamiento.