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) |