Débuter avec Paper.js Interaction utilisateur

Après avoir lu les deux premiers tutoriels, vous devriez pouvoir créer des chemins et des formes prédéfinies de base. Vous devriez aussi pouvoir simplifier ou aplatir vos chemins, les dessiner sur différents calques et les mélanger.. 

Même si nous avons parcouru un long chemin, il manque encore une chose. Jusqu'ici, il n'y a eu aucune interaction entre notre toile et l'utilisateur. Ce serait bien si nous pouvions donner aux utilisateurs la possibilité d'interagir avec différents chemins ou de dessiner quelque chose par eux-mêmes. Ce tutoriel couvrira toutes les bases de l’interaction utilisateur, à commencer par le outil variable.

Tool et ToolEvent

Il y a un global outil variable qui n'existe que dans les scripts contenant des fonctions de gestionnaire permettant d'interagir avec la souris ou le clavier. Cette variable vous donne accès à des propriétés telles que minDistance, qui est la distance minimale après laquelle la souris peut à nouveau déclencher le onMouseDrag événement, depuis sa dernière mise à feu. De même, la propriété maxDistance vous permet de spécifier une distance maximale après laquelle le onMouseDrag événement doit tirer à nouveau.

Paper.js a aussi un ToolEvent objet. C'est une extension de l'objet événement et le seul paramètre transmis à tous les gestionnaires d'événements de la souris. Il contient toutes les informations pertinentes sur ces événements de souris, tels que:

  • type, qui vous dit si l'événement est mouseup, souris vers le bas, déplacer la souris ou mousedrag.
  • point, qui vous donne la position de la souris lorsque l'événement a été déclenché.
  • delta, qui vous donne la distance entre la position actuelle et la dernière souris lorsque l'événement a été déclenché.
  • compter, ce qui vous donne le nombre de fois que l'événement souris a été déclenché.
  • article, qui vous donne l'élément qui était présent à l'emplacement de l'événement de la souris. Si l'article fait partie d'un groupe ou composé chemin alors le plus haut niveau de groupe ou composé  chemin est retourné.
  • lastPoint, qui donne la position de la souris lors du dernier déclenchement de l'événement.
  • downpoint, qui vous donne la position de la souris dans les coordonnées du projet lors du dernier clic.
  • point central, ce qui vous donne le point au milieu de lastPoint et point

N'oubliez pas tout cela, car ils seront fréquemment utilisés dans la plupart de vos projets..

Interactions de souris

Paper.js a diverses fonctions de gestionnaire appelées automatiquement pour gérer différents événements de souris. Les trois fonctions du gestionnaire de souris sont énumérées ci-dessous..

function onMouseDown (event) // Fait quelque chose console.log ('Souris enfoncée!');  function onMouseDrag (event) // Autre chose console.log ('Mouse dragged!');  function onMouseUp (event) // Ne faites rien console.log ('Souris publiée!'); 

Créons une démo de base basée sur le onMouseDown et onMouseUp manutentionnaires. Chaque fois qu'un utilisateur appuie sur un bouton de la souris, nous créons un nouveau Chemin et marquer ce point comme le début de notre Chemin

Chaque fois que l'utilisateur relâche le bouton de la souris, nous ajoutons un nouveau point à la fin de notre Chemin. Cela créera une ligne droite du point où le bouton de la souris a été appuyé au point où il a été relâché. Voici le code:

var aPath; fonction onMouseDown (event) aPath = new Path (); aPath.strokeColor = 'purple'; aPath.strokeWidth = event.point.x / 10; aPath.add (event.point);  function onMouseUp (event) aPath.add (event.point); 

J'ai aussi mis le strokeColor au violet et largeur du trait au dixième de la valeur de la coordonnée x en utilisant le event.point propriété. Si vous essayez de tracer des lignes verticales dans la zone grise ci-dessous, vous remarquerez qu'elles ont toutes une largeur directement proportionnelle à leur distance du côté gauche..

Maintenant, créons des cercles en utilisant le onMouseDrag un événement. Chaque fois qu'un événement de glissement est déclenché, nous allons tracer un cercle dont le centre est au centre du dernier et de l'actuel point de glissement. Le rayon du cercle dépendra directement de la vitesse de glissement de l'utilisateur. 

Pour localiser le centre de notre cercle, nous pouvons utiliser le point central propriété que nous avons discuté dans la section précédente. Pour déterminer le rayon du cercle, on peut utiliser le delta propriété et diviser le résultat par 2. Voici le code dont nous avons besoin:

tool.maxDistance = 50; tool.minDistance = 4; function onMouseDrag (event) var circle = new Path.Circle (center: event.middlePoint, radius: event.delta.length / 2); circle.fillColor = 'pink'; circle.strokeColor = 'black'; 

Si l'utilisateur faisait glisser la souris trop rapidement ou trop lentement, les cercles deviendraient trop grands ou trop petits.. 

Ce problème peut être résolu en utilisant le maxDistance et minDistance Propriétés. Si l'utilisateur se traîne trop vite, le maxDistance propriété déclenchera l'événement drag tous les 50 pixels. Si la vitesse de déplacement de l'utilisateur est trop lente, le minDistance les propriétés ne seront pas déclenchées tant que le seuil de distance minimum spécifié ne sera pas atteint. Vous pouvez tester le code ci-dessus en faisant glisser votre souris dans la zone grise ci-dessous:

Interactions clavier

le un événement L’objet a trois propriétés que vous pouvez utiliser pour vos interactions avec le clavier. le event.key propriété vous dira quelle touche a été enfoncée, et le événement.caractère La propriété vous indiquera le caractère qui a été généré lors de l’appui sur une touche. Pour déterminer si c'était un keyup ou touche Bas événement, vous pouvez utiliser le type d'événement propriété.

Utilisons ces propriétés ensemble pour créer de minuscules cercles et les déplacer. Regardez le code ci-dessous:

var step = 10; var centerPoint = nouveau Point (100, 100); fonction onKeyDown (event) var circle = new Path.Circle (centerPoint, 3); circle.fillColor = 'pink'; circle.strokeColor = 'black'; if (event.key == 'a') centerPoint - = new Point (step, 0);  // Code pour les autres clés

Nous créons une variable étape qui sera utilisé pour déterminer la vitesse à laquelle notre cercle se déplace. La variable Point central stocke l'emplacement du centre de nos cercles. le onKeyDown gestionnaire a le code pour gérer tous touche Bas événements. Cet événement est déclenché de manière continue tant qu'une touche est enfoncée. 

C'est la raison pour laquelle de nouveaux cercles sont créés en permanence. En fonction de la touche enfoncée, nous modifions la valeur de Point central pour déplacer notre cercle nouvellement créé à un autre endroit. Vous pouvez voir le code en action dans la démo ci-dessous:

Certaines clés, par exemple le Décalage clé et Option touche, ne produit pas directement un caractère lorsque vous appuyez dessus. Ces touches sont appelées touches de modification. le un événement l'objet a un événement.modificateurs propriété que vous pouvez utiliser pour déterminer la touche de modification sur laquelle vous avez appuyé. Considérons le code ci-dessous:

chemin var; fonction onMouseDown (event) path = new Path (); path.strokeColor = 'black'; path.strokeWidth = 2; path.add (event.point);  function onMouseDrag (event) if (event.modifiers.shift) path.lastSegment.point = event.point; path.simplify ();  else chemin.add (event.point); 

Chaque fois qu'un utilisateur appuie sur un bouton de la souris, le onMouseDown handler crée un nouveau chemin et y ajoute un point. Après avoir commencé à faire glisser, le onMouseDrag gestionnaire ajoute un nouveau point à chaque événement de glisser. 

Si vous faites glisser la souris avec le Décalage touche, le gestionnaire le détecte avec le bouton event.modifiers.shift propriété. Dans ce cas, au lieu d’ajouter un nouveau point à chaque événement glisser, il ne fait que définir les coordonnées du dernier segment sur l’emplacement actuel du pointeur de la souris. Cela simplifie également le chemin complet qui a été tracé. Vous pouvez faire glisser votre souris dans la zone grise ci-dessous pour voir le comportement du chemin lorsque le Décalage la touche est enfoncée.

Si la touche Maj ne semble pas fonctionner, c'est probablement parce que la toile n'a pas de focus. Dans ce cas, vous devez d’abord cliquer à l’intérieur du petit espace blanc sous la toile pour la mettre au point..

Dernières pensées

Les gestionnaires d'événements dont nous avons parlé aujourd'hui couvrent les scénarios d'interactivité les plus courants. Comme le montre clairement le didacticiel, il n’est pas difficile de manipuler les éléments d’un canevas en fonction des actions de l’utilisateur. La meilleure façon d'apprendre est de pratiquer. Je voudrais donc vous suggérer de créer vos propres démos en combinant tout ce que vous avez appris dans les trois didacticiels..

Si vous avez des questions concernant ce tutoriel, merci de me le faire savoir dans les commentaires..