Comme je l'ai dit plus haut, toutes les méthodes de dessin s'utiliseront sur l'objet
context. Nous allons tout d'abord voir les formes les plus simples, et nous terminerons avec les plus complexes.
Les types de formes
Avant de tracer la moindre forme, il faut savoir qu'il en existe deux types :
Les formes de type «fill», ce sont des formes pleines.
Les formes de type «stroke», ce sont les contours de la forme qui seront tracés.
Ainsi, pour identifier quel type de forme on tracera avec telle ou telle méthodes, il nous suffira de lire son préfixe, à savoir : «fill» et «stroke».
Rappels sur les coordonnées
Pour pouvoir tracer quoi que ce soit, il vous faudra comprendre comment sont positionnés les éléments sur le canvas.
Chacun des éléments composant notre dessin est positionné sur un repère imaginaire dont l'origine est le coin supérieur gauche du canvas.
Ainsi, si l'on avait un canvas de 300 pixels sur 300 pixels,
- Le point [0, 0] se situerait en haut à gauche
- Le point [300, 300] se situerait lui tout en bas à droite.
- Le point [0, 300] se situerait tout en bas à gauche.
- Etc...
Je ne pense pas que ce soit cela qui vous cause le plus de problèmes, à moins bien sûr que vous ayez raté quelques cours de 6
eme
Les formes
Le rectangle
La méthode à utiliser, ici, est
fillRect(x, y, largeur, hauteur);. Il va de soi que
strokeRect(); fonctionne aussi.
| Paramètre : |
Description : |
| x |
Coordonnées du coin supérieur gauche sur l'abscisse |
| y |
Coordonnées du coin supérieur gauche sur l'ordonnée |
| Largeur |
Largeur du rectangle, en pixels. |
| Hauteur |
Hauteur du rectangle, en pixels. |
Les lignes
J'avoue que leurs noms n'ont vraiment rien d'alléchant, pourtant, elles sont assez utiles. Vous aurez quatre méthodes à connaître pour pouvoir exploiter leur potentiel.
Code : JavaScript - Exemple de tracé de ligne avec canvas | //On n'oublie pas de récupérer le canvas et son context.
context.beginPath();//On démarre un nouveau tracé
context.moveTo(0, 300);//On se déplace au coin inférieur gauche
context.lineTo(150, 0);
context.lineTo(300, 300);
context.lineTo(0, 300);
context.stroke();//On trace seulement les lignes.
context.closePath();
|
| Méthode : |
Utilité : |
| context.beginPath(); |
On indique au context que l'on s'apprête à effectuer un nouveau tracé. Quant à context.closePath();, il indique au context que l'on a terminé avec ce tracé. |
| context.moveTo(x, y); |
Par défaut, si l'on trace une ligne, elle commencera aux coord. [0, 0]. Cette fonction déplace le point de départ de chaque ligne. |
| context.lineTo(x, y); |
Cette fonction trace une ligne en partant de la position actuelle, jusqu'aux coordonnées x, y indiquées. |
| context.fill(); |
Créer une forme pleine à partir des lignes tracées. |
| context.stroke(); |
Créer juste les traits des lignes. |
| Attribut : |
Utilité : |
Type de valeur accepté : |
| context.lineWidth = valeur; |
Change l'épaisseur des lignes |
Nombre Entiers |
| context.lineJoin = valeur; |
Change le type de jointure entre les lignes |
Chaîne de caractères suivantes : «round» (arrondi), ou «bevel» (en biseau) |
Le cercle
En réalité, il n'existe pas de méthode pour créer un cercle seulement. Il faut en fait passer par la fonction permettant le tracé d'un arc de cercle.
Voilà comment on utilise la fonction «arc» (c'est son p'tit nom

) :
Code : JavaScript - Tracé d'un rond | //On n'oublie pas de récupérer l'objet canvas et son context.
context.beginPath(); //On démarre un nouveau tracé.
context.arc(100, 100, 50, 0, Math.PI*2); //On trace la courbe délimitant notre forme
context.fill(); //On utilise la méthode fill(); si l'on veut une forme pleine
context.closePath();
|
On utilisera context.stroke(); quand on ne voudra que les contours de la forme.
Étant donné qu'elle requiert beaucoup de paramètres qui, pour la plupart vous sembleront obscurs, j'ai jugé utile de vous les présenter sous forme de tableau :
| Paramètre : |
Description : |
| x |
Coordonnées du centre du cercle, sur l'abscisse |
| y |
Coordonnées du centre du cercle, sur l'ordonnée. |
| Rayon |
C'est tout simplement le rayon du cercle (exprimé en pixels) |
| Angle de départ |
C'est l'angle à partir duquel on va commencer notre tracé, il est exprimé en Radians (voir le schéma ci-dessous). |
| Angle de fin |
C'est l'angle jusqu’au quel on va effectuer notre tracé. Il est lui aussi exprimé en Radians. |
| «Anti-clockwise» |
C'est un booléen qui, quand il vaut true inverse le sens du tracé. Ainsi, l'angle de départ sera l'angle de fin, et l'angle de fin sera, quant à lui, l'angle de départ. |
Tout comme me l'a très justement signalé
Amatewasu, mes explications quant aux angles n'étaient visiblement pas des plus claires, et c'est pourquoi j'ai rajouté ce petit paragraphe explicatif afin que tout le monde s'y retrouve.
Pour définir un angle, il vous suffit de multiplier à
Math.PI une valeur comprise entre 0 et 2 afin de définir la position de votre angle. Notez que si le 2 n’apparaît pas sur le schéma, c'est parce qu'il est exactement à la même position que le 0, mais après une révolution complète.
Les images
Cette fonction est vraiment très puissante, elle permet via ses neuf paramètres d'afficher une image sur le
<canvas> à certaines coordonnées, en la rognant ou en la déformant si nécessaire.
Sa forme la plus basique ne comporte que trois paramètres : l'objet "Image" et les coordonnées x et y :
Code : JavaScript - Dessin d'une image complète | //On n'oublie pas de récupérer l'objet canvas et son context.
var mon_image = new Image();
mon_image.src = "mon_image.png";
context.drawImage(mon_image, 0, 0);
|
Sa forme la plus complexe prend, elle, neuf paramètres :
| Paramètre : |
Description : |
| image |
On lui passe un objet "Image". |
| xSource |
Position x dans le fichier, et à partir de laquelle on récupère l'image. |
| ySource |
Position y dans le fichier, et à partir de laquelle on récupère l'image |
| SourceWidth |
Largeur de l'image que l'on récupère dans le fichier |
| SourceHeight |
Hauteur de l'image que l'on récupère dans le fichier |
| posX |
Position x sur le canvas à partir de laquelle on va dessiner l'image. |
| posY |
Position y sur le canvas à partir de laquelle on va dessiner l'image. |
| Width |
Largeur de l'image dessinée sur le canvas. |
| Height |
Hauteur de l'image dessinée sur le canvas. |
Code : JavaScript - Dessin d'une portion d'image | //On n'oublie pas de récupérer l'objet canvas et son context.
var mon_image = new Image();
mon_image.src = "mon_image.png";
context.drawImage(mon_image, 0, 0, 10, 10, 35, 60, 15, 15);
|
Ici, on récupère dans "
mon_image", la portion de 10x10 pixels aux coordonnées [0, 0], et on la place sur le canvas aux coordonnées [35, 60] pour enfin l'agrandir à 15x15 pixels.
Si vous souhaitez en savoir plus sur la fonction drawImage, sachez que
sebcap26 à publié un tutoriel sur la
création d'un mini-rpg utilisant canvas et la fonction drawImage de manière poussée.
Le texte
Par chance, il existe une fonction permettant de dessiner du texte. Elle est vraiment très simple, elle ne prend que trois paramètres et l'on peut même choisir la police. N'est-ce pas merveilleux ?
Code : JavaScript - Dessin d'une chaîne de caractères | //On n'oublie pas de récupérer l'objet canvas et son context.
context.font = "18px Helvetica";//On passe à l'attribut "font" de l'objet context une simple chaîne de caractères composé de la taille de la police, puis de son nom.
context.fillText("Hello World", 0, 30);//strokeText(); fonctionne aussi, vous vous en doutez.
|
Notez que j'ai effectué un retrait de 30 pixels sur l'axe des ordonnées, cela est dû au fait que la méthode fillText(); trace la chaîne de caractères en partant de son coin inférieur droit. Ainsi, la chaîne se retrouve en dehors du canvas, d'où le retrait.
Les couleurs
J'aurais peut-être dû vous en parler avant, mais j'ai pensé qu'étant une notion simple et plus «divertissante» que toutes ces fonctions compliquées, il serait plus agréable de la voir à la fin. Donc oui, vous n'êtes pas obligés de créer vos formes en noir & blanc, il existe un attribut de l'objet
context que l'on peut modifier afin de changer les couleurs. Le voici :
Code : JavaScript - Exemple d'application de couleur à un type de formes | context.fillStyle = "#ff0000"; //Toutes les prochaines formes pleines seront rouges.
context.strokeStyle = "rgba(0, 0, 255, 0.5)"; //Toutes les prochaines formes "stroke" seront bleues et semi-transparentes.
|
Les dégradés
Vous en voulez encore n'est-ce pas ? Vous voulez pouvoir faire des graphiques qui en jettent ? Et bien en plus de superbes couleurs, vous pouvez créer de superbes dégradés, ils fonctionnent exactement comme les couleurs, on les passe par l'attribut
context.fillStyle.
Code : JavaScript - Tracé d'un dégradé linéaire simple | //On n'oublie pas de récupérer le canvas et son context.
var degrade = context.createLinearGradient(0,0,300,100);//Délimitation du début et de la fin du dégradé.
degrade.addColorStop(0,"#FFFFFF");//Ajout d'une première couleur.
degrade.addColorStop(1,"#000000");//Ajout de la seconde couleur.
context.fillStyle = degrade;//On passe notre dégradé au fillStyle();
context.fillRect(0,0,300,300);//On trace un rectangle plein qui aura pour style le dégradé.
|
Dans cet exemple, nous traçons sur un canvas de 300x300 pixels :
Ligne 3 : var degrade = context.createLinearGradient(0,0,300,100); nous définissons les limites du dégradé.
Ligne 4 à 8 : Ensuite, nous y ajoutons deux couleurs. Et nous l'appliquons au fillStyle, et enfin créons le rectangle porteur du dégradé.
Dans la fonction addColorStop(offset, couleur);, l'ordre des offset est important dans l'ordre des couleurs. En revanche, l'ordre des instructions, lui, n'est pas déterminant.