82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Paths
							 | 
						||
| 
								 | 
							
								localeTitle: Caminos
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								## Senderos en lienzo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Los caminos son la piedra angular del dibujo en Canvas. Un camino es solo una forma. Luego, la forma se puede dibujar ya sea acariciándola o rellenándola.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Podemos crear rutas de uso con `beginPath` , `fill` y `stroke` .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								ctx.beginPath(); 
							 | 
						||
| 
								 | 
							
								 ctx.rect(0, 0, 100, 100); 
							 | 
						||
| 
								 | 
							
								 ctx.fillStyle="black"; 
							 | 
						||
| 
								 | 
							
								 ctx.fill(); 
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Esto crea un cuadrado negro en la esquina superior derecha del lienzo. Podemos cambiar los trazos y rellenos con `strokeStyle` y `fillStyle` , que ambos toman cadenas de colores similares a CSS. También podemos usar `lineWidth` para hacer trazos más gruesos.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								ctx.beginPath(); 
							 | 
						||
| 
								 | 
							
								 ctx.moveTo(0,0); 
							 | 
						||
| 
								 | 
							
								 ctx.lineTo(300,150); 
							 | 
						||
| 
								 | 
							
								 ctx.moveTo(0, 100); 
							 | 
						||
| 
								 | 
							
								 ctx.lineTo(300, 250); 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 ctx.strokeStyle="red"; 
							 | 
						||
| 
								 | 
							
								 ctx.lineWidth=2; 
							 | 
						||
| 
								 | 
							
								 ctx.stroke(); 
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Hay cuatro funciones básicas de dibujo: `rect` , `moveTo` , `lineTo` y `arc` .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*   `rect(x, y, width, height)` agrega un rectángulo creado a partir de ( `x` , `y` ) de dimensiones ( `width` , `height` ) a la ruta.
							 | 
						||
| 
								 | 
							
								*   `moveTo(x,y)` mueve el lápiz a un punto en el lienzo
							 | 
						||
| 
								 | 
							
								*   `lineTo(x,y)` mueve el lápiz a un punto en el lienzo, luego agrega una línea entre el punto nuevo y el punto anterior a la ruta.
							 | 
						||
| 
								 | 
							
								*   `arc(x, y, r, ti, tf)` agrega un arco (una porción de un círculo) a ( `x` , `y` ), del radio `r` , y desde el ángulo `ti` a `tf` a la trayectoria.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tenga en cuenta que estas funciones se agregan a la ruta de trabajo. No crean nuevos caminos.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								//example 1 
							 | 
						||
| 
								 | 
							
								 ctx.beginPath(); 
							 | 
						||
| 
								 | 
							
								 ctx.rect(0, 0, 50, 50); 
							 | 
						||
| 
								 | 
							
								 ctx.rect(100, 100, 50, 50); 
							 | 
						||
| 
								 | 
							
								 ctx.fill(); 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 //example 2 
							 | 
						||
| 
								 | 
							
								 ctx.beginPath(); 
							 | 
						||
| 
								 | 
							
								 ctx.rect(0, 0, 50, 50); 
							 | 
						||
| 
								 | 
							
								 ctx.beginPath(); 
							 | 
						||
| 
								 | 
							
								 ctx.rect(100, 100, 50, 50); 
							 | 
						||
| 
								 | 
							
								 ctx.fill(); 
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								El primer ejemplo dibujará dos cuadrados, mientras que el segundo solo dibujará uno ya que `beginPath` descartó el primer rectángulo en la ruta de trabajo anterior.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Este hecho lleva a un error común al hacer animaciones de `canvas` .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var x = 0; 
							 | 
						||
| 
								 | 
							
								 var y = 0; 
							 | 
						||
| 
								 | 
							
								 function draw() { 
							 | 
						||
| 
								 | 
							
								  ctx.clearRect(0, 0, canvas.width, canvas.height); 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								  ctx.rect(x, y, 50, 50); 
							 | 
						||
| 
								 | 
							
								  ctx.fill(); 
							 | 
						||
| 
								 | 
							
								  x+=1; 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								  window.requestAnimationFrame(draw); 
							 | 
						||
| 
								 | 
							
								 } 
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 window.requestAnimationFrame(draw); 
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								La animación anterior, que se supone que hace un movimiento cuadrado en la pantalla, crea una barra negra larga. La razón es que no se llama a `beginPath` dentro del ciclo de `draw` .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Para leer más sobre animación, vea la página de [animación](/articles/canvas/animation-in-canvas/) .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Más información:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*   [API MDN Canvas](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)
							 |