duduromeroa.com

#animación #javascript #canvas #drawImage #método

Javascript para interacción: método drawImage() para imágenes animadas



#javascript #Canvas #API #javascript

Aclaración: Contenido para quienes ya comprenden y practican HTML, CSS y JS. Para profundizar en Javascript ir a esta sección o a cualquiera de los libros mostrados abajo en la bibliografía.



Método drawImage() para animar imágenes estáticas o desde plantilla de sprites

Ya vimos que un método es un código (agrupado en una función) que recibe referencias de valores que luego serán usadas para alterar propiedades de una referncia. Esta puede ser un conjunto de datos, como la posición de un contenedor de imagen.

En el caso de hoy, drawImage() es un método que apunta a valores de propiedades que necesitaremos para, por ejemplo, ubicar un contenedor de imagen en el elemento canvas, y también para darle dimensiones y otras alteraciones interactivas a ese mismo contenedor.

drawImage() recibe como máximo nueve parámetros, pero siendo solo tres de ellos los fijos o siempre requeridos. Recordemos que un parámetro es la referencia a una o más propiedades de algún otro conjunto de datos a los que debemos ingresar nuevos valores. En sencillas palabras, un parámetro es un valor que se espera obtener para realizar otros cálculos.

En el caso del método drawImage(), podrán haber tantos métodos en el conjunto interactivo, tantos como se requieran, pero será necesario evaluarlos en su desempeño si esos métodos son excesivos en cantidad.

En Javascript

context.drawImage(
  // Referencia a la imagen que debe ser mostrada o alterada
   referenciaImagen,

  // Ubicación horizontal de imagen (acepta negativo)
   coordX,

  // Ubicación vertical imagen (acepta negativo)
   coordY,

  // OPC: ancho de la imagen
   ancho,

  // OPC: alto de la imagen
   alto,

  // Recorte horizontal de imagen
   rx,

  // Recorte vertical de imagen
   ry,

  // que es esto
   ax,

  // que es esto
   ay
);

Tener en cuenta que la imagen del recuadro (en X) tiene 150px por lado. El comportamiento de cada parámetro de drawImage() lo resumo así.

Ejemplo abajo: context.drawImage(img, -50, 0)



Ejemplo abajo: context.drawImage(img, 100, 50, img.width / 2, img.height / 2)



Ejemplo abajo: context.drawImage(img, 0, 0, 100, 100, 50, 10, 150, 150)

Las relaciones de estos parámetros con el elemento mostrado son las siguientes.


Atención Parámetros fijos (por default) u opcionales en el método drawImage()

Las siglas OPC -opcional- en los comentarios de cada parámetro indican que ese parámetro puede ser o no agregado; y que complementará el resto de parámetros. En cambio, los parámetros con '--' indican que son fijos (siempre necesarios) incluso pueden ser los únicos en el método. Recordar también que el parámetro que corresponde a img es el único que referencia al identificador de la imagen.


En Javascript

ctx.drawImage(
img,  /* Referencia imagen */ 
0,    /* OPC: Posición X (Horizontal) de la esquina superior izquierda de la IMAGEN CONTENIDA en el subrectángulo */
0,    /* OPC: Posición Y (Vertical) de la esquina superior izquierda de la IMAGEN CONTENIDA en el subrectángulo */

100,  /* OPC: Ancho del rectángulo (que contiene la imagen) Es decir, ancho de la imagen recortada */
100,  /* OPC: Altura del rectángulo (que contiene la imagen) Es decir, alto de la imagen recortada */

50,    /* -- Ubicación X de Subrectángulo de imagen en el canvas. */
10,    /* -- Ubicación Y de Subrectángulo de imagen en el canvas. */

150,   /* OPC: Escala horizontal de la imagen. Si no esta aqui, la imagen desaparece. */
150    /* OPC: Escala vertical de la imagen. Si no esta aqui, la imagen desaparece. */
       /* Estos dos últimos parecieran que también influyen en la imagen crop */
);



Según lo anterior, el método drawImage() expone de manera visual el comportamiento de los parámetros que apuntan a las propiedades de ubicación de un elemento imagen añadido a canvas, y cómo su papel es alternado cuando esa misma estructura de parámetros contiene más de dos de ellos.

Hasta aquí hemos revisado muy brevemente algunos aspectos (no todos) del uso del elemento HTML canvas en web. En las secciones anteriores vimos:

Siguiente: Deslizamiento táctil en Javascript sin elemento canvas.

Anterior: imágenes animadas e interactivas y uso de sprites con API canvas en web