martes, 9 de septiembre de 2014
HTML5 - Dibujando formas con canvas
La red
Antes de que podamos empezar a dibujar, necesitamos hablar sobre la red de canvas o espacio de coordinación. La plantilla de la página anterior tenía un elemento canvas con un height y un width de 150 pixeles. A la derecha, puedes ver este canvas con la red normal overlayed. Normalmente una unidad en la red corresponde a un pixel en el elemento canvas. El origen de esta red esta posicionado en la esquina superior derecha (coordenada (0,0)). Todos los elementos estan posicionados de manera relativa a este punto, así que la posición de la esquina superior derecha del cuadrado azul es de x pixeles desde la izquierda y y pixeles desde arriba (coordenada (x,y)). Mas tarde en este tutorial veremos como trasladar el punto de origen a una posición diferente, girar la red e incluso darle una escala diferente. Por ahora nos dedicaremos a lo mas común.
Dibujando rectángulos
A diferencia de SVG, <canvas> sólo es compatible con una forma primitiva: rectángulos. Todas las demás formas se deben crear mediante la combinación de una o más rutas. Por suerte, contamos con una variedad de funciones de trayectoria dibujo que permiten componer formas muy complejas.
En primer lugar vamos a ver el rectángulo. Hay tres funciones que dibujan rectángulos en el canvas:
fillRect(x, y, width, height) Dibuja un rectángulo relleno. strokeRect(x, y, width, height) Dibuja un contorno rectangular. clearRect(x, y, width, height) Borra el área rectangular especificada, por lo que es totalmente transparente.
Cada una de estas tres funciones toma los mismos parámetros. x e y especifican la posición en el canvas (en relación con el origen) de la esquina superior izquierda del rectángulo. anchura y altura proporcionan el tamaño del rectángulo.
A continuación se muestra la función draw() de la página anterior, pero ahora haciendo uso de estas tres funciones.
Ejemplo Forma Rectangular
function draw() { var canvas = document.getElementById('canvas'); if (canvas.getContext) { var ctx = canvas.getContext('2d'); ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50); } }
El resultado de este ejemplo se muestra a continuación.
La función fillRect() dibuja un cuadrado grande negro 100 píxeles en cada lado. La función clearRect() y luego borra un cuadrado de 60x60 pixel del centro, y luego strokeRect() es llamado para crear un contorno rectangular de 50x50 píxeles dentro de la plaza despejado.
En las próximas páginas veremos dos métodos alternativos para clearRect(), y también veremos cómo cambiar el color y el trazo estilo de las formas prestados.
A diferencia de las funciones de trayectoria que veremos en la siguiente sección, las tres funciones rectángulo dibujan inmediatamente al canvas.
Dibujando trazados
Para hacer formas con trazados toma algunas medidas adicionales. En primer lugar, se crea el camino. Luego utiliza comandos de dibujo para dibujar en el camino. Luego cierra el camino. Una vez que el camino ha sido creado, puedes modificar o llenar el camino para hacerlo. Estas son las funciones que se usan para hacer esto:
beginPath() Crea un nuevo camino. Una vez creado, comandos de dibujo futuras se dirigen a la ruta de acceso y usados para construir el camino hacia arriba. closePath() Cierra la ruta para que los comandos de dibujo futuras se dirigen de nuevo al contexto. stroke() Dibuja la forma por retocar su contorno. fill() Dibuja una forma sólida llenando área de contenido de la ruta.
El primer paso para crear un camino es llamar a la beginPath(). Internamente, las rutas se almacenan como una lista de sub-rutas (líneas, arcos, etc) que en conjunto forman una figura. Cada vez que este método se llama, la lista se pone a cero y podemos empezar a dibujar nuevas formas.
Nota: Si la trayectoria actual está vacía, por ejemplo, inmediatamente después de llamar beginPath (), o en un lienzo de nueva creación, el primer comando de construcción de pistas siempre es tratado como un moveTo (), independientemente de lo que realmente es. Por esa razón, casi siempre tendrá que ajustar específicamente a su posición inicial después de reiniciar un camino.
El segundo paso es llamar a los métodos que realmente especifican los caminos para ser dibujado.
La tercero, es un paso opcional, es llamar closePath(). Este método intenta cerrar la forma dibujando una línea recta desde el punto actual al inicio. Si la forma ya se ha cerrado o no hay un solo punto en la lista, esta función no hace nada.
Nota: Cuando se llama a fill(), las formas abiertas se cierran automáticamente, asíque no tienes que llamar closePath (). Este no es el caso cuando se llama stroke().
Dibujando un triangulo
Para dibujar un triangulo podemos ver el siguiente ejemplo:
function draw() { var canvas = document.getElementById('canvas'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(75,50); ctx.lineTo(100,75); ctx.lineTo(100,25); ctx.fill(); } }
El resultado es el siguiente:
Moviendo el lápiz
Una función muy útil, que en realidad no dibuja nada, pero se convierte en parte de la lista de rutas se ha descrito anteriormente, es la función moveTo (). Probablemente mejor que se puede pensar en esto como levantar una pluma o un lápiz de un punto en una hoja de papel y colocarlo en la siguiente.
moveTo (x, y)
Mueve la pluma a las coordenadas especificadas por xe y.
Cuando el canvas se inicializa o beginPath() se llama, normalmente tendrá que usar la función moveTo() para colocar el punto de partida en otro lugar. También podríamos utilizar moveTo() para dibujar caminos inconexos. Echa un vistazo a la cara sonriente a continuación. He marcado los lugares donde acostumbraba el método moveTo() (las líneas rojas).
Para probar esto por ti mismo, puede utilizar el siguiente fragmento de código. Sólo tienes que pegar en la función draw () que vimos anteriormente.
function draw() { var canvas = document.getElementById('canvas'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle ctx.moveTo(110,75); ctx.arc(75,75,35,0,Math.PI,false); // Mouth (clockwise) ctx.moveTo(65,65); ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye ctx.moveTo(95,65); ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye ctx.stroke(); } }
Teniendo como resultado:
Nota: Para obtener más información sobre la función de arc(), consulte los Arc.
Puedes acceder a la segunda parte de este post a través del siguiente link: canvas II
Suscribirse a:
Enviar comentarios
(
Atom
)
Sígueme en las Redes Sociales
Donaciones
Datos personales
Entradas populares
-
En este apartado vamos a explicar como ejercutar archivos PHP a través del terminal de Ubuntu. Lo primero que tendríamos que hacer es inst...
-
En este blog voy a comentar un tema que se utilizan en casi todas las páginas web que existen, y es el tema de la paginación. La paginaci...
-
Este post trata de la integración de la librería PHPExcel en Codeigniter, aunque se podría aplicar a cualquier librería, como por ejemplo mP...
-
Ejemplo para añadir o sumar un número determinado de hora/s, minuto/s, segundo/s a una fecha en php. Con la función strtotime se puede ...
-
Este tema es uno de los temas primordiales sobre el framework Codeigniter, ya que en alguna ocación nos hemos visto obligados a recoger dato...
© Espacio Daycry - Espacio de programación 2013 . Powered by Bootstrap , Blogger templates and RWD Testing Tool
No hay comentarios :
Publicar un comentario