Premiers pas avec Paper.js : animations et images
Jusqu'à présent dans cette série, j'ai couvert les éléments et les éléments, les chemins et la géométrie, ainsi que l'interaction des utilisateurs dans Paper.js. La bibliothèque vous permet également d'animer divers éléments de votre projet. Si vous combinez cela avec la possibilité d'agir en fonction des entrées de l'utilisateur, vous pouvez créer des effets vraiment sympas. Ce didacticiel vous montre comment animer des éléments dans Paper.js.
Plus loin dans ce didacticiel, nous aborderons également le traitement des images et la manière de manipuler la couleur des pixels individuels. La bibliothèque vous permet également de créer des rasters à partir de vecteurs, qui seront abordés à la fin.
Connaissance de base de l'animation
Toutes les animations dans Paper.js sont gérées par onFrame
gestionnaires d'événements. Le code dans le gestionnaire est exécuté jusqu'à 60 fois par seconde. La vue est automatiquement redessinée après chaque exécution. Changer progressivement certaines propriétés à l'intérieur d'une fonction peut créer de très jolis effets.
onFrame
处理函数还接收 event
Les fonctions de gestionnaire reçoivent également des objets event
. Cet objet possède trois propriétés qui nous fournissent des informations liées à l'animation.
Le premier est event.count
,它告诉我们处理程序执行的次数。第二个是 event.delta
,它为我们提供了自上次执行处理程序以来经过的总时间。第三个是 event.time
qui nous donne le temps écoulé depuis le premier événement frame.
Vous pouvez animer de nombreuses propriétés dans les gestionnaires. Dans notre exemple, je vais faire pivoter trois rectangles et modifier la teinte du rectangle central. Considérez le code suivant :
var rectA = new Path.Rectangle({ point: [300, 100], size: [200, 150], strokeColor: 'yellow', strokeWidth: 10 }); var rectB = rectA.clone(); rectB.strokeColor = 'orange'; rectB.scale(0.8); var rectC = rectA.clone(); rectC.strokeColor = 'black'; rectC.scale(1.2); function onFrame(event) { rectA.strokeColor.hue += 10 * event.delta; rectA.rotate(2); rectB.rotate(2); rectC.rotate(2); }
Comme le montre l’extrait de code ci-dessus, très peu de code réel est nécessaire pour animer un rectangle. Pour le rectangle A, nous augmentons la teinte d'un facteur 10 à chaque fois que le gestionnaire onFrame
处理程序时将色调增加 10 倍 event.delta
。 event.delta
est exécuté event.delta
. La valeur de event.delta
est généralement proche de 0,01. Si je n'avais pas multiplié sa valeur par 10, il aurait fallu beaucoup de temps pour remarquer le changement de couleur.
Chaque fois que j'exécute le code, je fais pivoter chaque rectangle de 2 degrés. Si nous utilisons la valeur event.time
pour faire pivoter le rectangle, la rotation deviendra très rapide au bout d'un moment.
Vous pouvez également animer des fragments individuels au lieu d'animer l'ensemble du chemin ou de l'élément en même temps. Le processus lui-même est très simple. Vous pouvez utiliser la valeur path.segments
返回构成路径的所有段的数组。可以通过提供 index
pour accéder à des segments individuels. Avant d'aller plus loin, j'aimerais que vous jetiez un œil au code ci-dessous.
var aSquare = new Path.RegularPolygon(new Point(550, 200), 4, 100); aSquare.fillColor = 'pink'; aSquare.fullySelected = true; function onFrame(event) { for (var i = 0; i <= 3; i++) { var sinValue = Math.sin(event.time * 4 + i); aSquare.segments[i].point.x = sinValue * 100 + 350; } aSquare.segments[1].point.y = sinValue * 50 + 100; }
Ici, nous commençons par Path.RegularPolygon(center, Sides, radius)
构造函数创建一个正方形。 sides
参数确定多边形的边数。 radius
参数决定多边形的大小。我还将 completelySelected
属性设置为 true
pour que vous puissiez voir les points individuels.
Dans le gestionnaire onFrame
处理程序内,我使用 for 循环迭代所有段,并将它们的 x 坐标设置为等于基于其索引计算的值。在 Math.sin()
函数内使用 event.time
函数不会产生任何与极值相关的问题,因为 Math.sin() 的值不会产生任何与极值相关的问题。 sin()
, j'utilise une boucle for pour parcourir tous les segments et définir leurs coordonnées x égales aux valeurs calculées en fonction de leurs index. L'utilisation de la fonction
Math.sin()
ne crée aucun problème lié aux valeurs extrêmes car la valeur de Math.sin() Non des problèmes liés aux valeurs extrêmes surviennent. La fonction sin()
sera toujours comprise entre -1 et 1.
onFrame
处理程序中的代码。我建议您尝试为多边形构造函数以及 sin
La démo suivante montre notre carré animé, qui d'ailleurs n'est plus un carré grâce au code de notre gestionnaire </p>. Je vous suggère d'essayer différentes valeurs pour le constructeur de polygones et les arguments de la fonction sin
pour voir comment ils affectent l'animation finale dans la démo. <图>
img
标签将其添加到网页的标记中,并为其指定 id
。这个 id
随后被传递给 new Raster(id)
Les images dans Paper.js sont appelées rasters. Vous pouvez les transformer et les déplacer comme n’importe quel autre élément. Pour utiliser des images dans votre projet, vous devez d'abord utiliser le constructeur
N'oubliez pas que l'image que vous utilisez doit être chargée et doit être hébergée sur le même site Web que votre projet. L'utilisation d'images hébergées sur d'autres domaines entraînera des erreurs de sécurité. Dans ce tutoriel nous allons manipuler les images suivantes :
要访问上图中各个像素的颜色,您可以使用 栅格。 getPixel(x, y)
函数,其中 x 和 y 是像素的坐标。下面的代码生成 7*7 像素的正方形,填充位于左上角的像素的颜色:
var raster = new Raster('landscape'); var gridSize = 8; var rectSize = 7; raster.on('load', function() { raster.size = new Size(80, 40); for (var y = 0; y < raster.height; y++) { for (var x = 0; x < raster.width; x++) { var color = raster.getPixel(x, y); var path = new Path.Rectangle( new Point(x, y) * gridSize, new Size(rectSize, rectSize)); path.fillColor = color; } } project.activeLayer.position = view.center; });
加载栅格后,我们将其大小调整为 80*40。像素。在嵌套的 for
循环内,我们遍历该栅格的各个像素并创建 7*7 的正方形。增加栅格的大小会给我们带来更好的结果,但执行速度会更慢。这是最终结果,调整后的光栅在左上角可见:
如果要隐藏调整大小后的栅格,可以将 raster.visible
属性设置为 false
。您还可以操纵生成的方块的颜色。例如,要增加所有方块中的红色分量,您可以使用以下行:
path.fillColor = color + new Color(0.4,0,0);
在这种情况下,最终结果将是:
<图>光栅化项目
虽然 Paper.js 是一个矢量图形库,但它还允许您从现有项目创建光栅。为此,您必须使用 item.rasterize()
方法。光栅化后,原始项目本身不会从项目中删除。您还可以选择指定光栅的分辨率(以每英寸像素为单位)。下面的代码以不同的分辨率从多边形创建两个栅格:
var aDodecagon = new Path.RegularPolygon(new Point(150, 180), 12, 30); aDodecagon.fillColor = '#CCAAFC'; var dodecRasterA = aDodecagon.rasterize(); dodecRasterA.position.x += 250; var dodecRasterB = aDodecagon.rasterize(150); dodecRasterB.position.x += 500; aDodecagon.scale(3); dodecRasterA.scale(3); dodecRasterB.scale(3);
与中间的相比,最右边的分辨率更高的多边形仍然很清晰。最终结果如下:
最终想法
如果您已阅读本系列中的所有教程,您应该拥有足够的知识来开始使用 Paper.js。虽然学习该库的基础知识很容易,但掌握所有概念将需要您付出一些努力。每当您需要有关某个主题的更多信息时,您可以浏览官方网站上的参考资料。
JavaScript 已成为事实上的网络工作语言之一。它并非没有学习曲线,而且还有大量的框架和库可以让您忙碌起来。如果您正在寻找其他资源来学习或在工作中使用,请查看我们在 Envato 市场中提供的资源。
如果您使用此库创建了一些有趣的东西,请在评论中分享您的作品。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Avec le développement de la technologie de l’intelligence artificielle, le traitement du langage naturel (NLP) est devenu une technologie très importante. La PNL peut nous aider à mieux comprendre et analyser le langage humain pour réaliser certaines tâches automatisées, telles que le service client intelligent, l'analyse des sentiments, la traduction automatique, etc. Dans cet article, nous aborderons les bases et les outils du traitement du langage naturel à l'aide de PHP. Qu'est-ce que le traitement du langage naturel ? Le traitement du langage naturel est une méthode qui utilise la technologie de l'intelligence artificielle pour traiter

À mesure qu’Internet continue de se développer, la demande de technologies front-end et back-end augmente également. En tant que développeur back-end, la maîtrise de PHP est essentielle. Dans le développement PHP, nous devons souvent traiter des demandes et des réponses. Cet article discutera de la requête et de la réponse PATCH, fournissant un guide pratique pour les débutants PHP. 1. Requête PATCH La requête PATCH est une méthode de requête HTTP utilisée pour mettre à jour les ressources existantes. Dans le protocole HTTP, il existe un moyen d'utiliser une requête PUT pour

Java est un langage de programmation largement utilisé dans le développement de logiciels. Sa syntaxe concise et ses fonctions puissantes en font le premier choix de nombreux développeurs. Cependant, pour les débutants, apprendre Java peut sembler un peu difficile. Cet article fournira un guide destiné aux débutants en développement Java pour les aider du début à l'abandon. Apprenez la syntaxe de base. La syntaxe de base de Java comprend des variables, des types de données, des opérateurs, des instructions conditionnelles, des instructions de boucle, etc. Les débutants doivent commencer par ces concepts de base et rédiger des exemples de code simples pour approfondir leur compréhension.

PHP est un langage de script côté serveur populaire couramment utilisé pour le développement Web, tandis que YAML est un format léger de sérialisation de données utilisé pour les fichiers de configuration et l'échange de données. Dans cet article, nous explorerons comment PHP fonctionne avec YAML et comment démarrer. PHP et YAML Lors du développement d'applications Web, les développeurs doivent gérer une grande quantité de données et de configuration. Ces données et configurations peuvent être stockées dans une base de données ou à l'aide de fichiers texte. Les fichiers texte utilisent généralement XML, JSON ou YA

Introduction à la technologie PHP : Détails du produit Taobao Interprétation du document API Introduction : PHP, en tant que langage de programmation largement utilisé dans le développement Web, dispose d'un grand groupe d'utilisateurs et d'une riche bibliothèque d'extensions. Parmi eux, l'utilisation de PHP pour développer l'API de détails des produits Taobao est une exigence très pratique et courante. Cet article fournira une interprétation détaillée du document API des détails du produit Taobao afin de fournir un guide d'introduction pour les débutants. 1. Qu'est-ce que l'API Taobao Product Details ? L'API Taobao Product Details est une interface fournie par la plateforme ouverte Taobao.

Partir de zéro : guide d'introduction au développement de PHP WebSocket et tutoriel d'implémentation des fonctions 1. Introduction Avec le développement d'Internet, la demande de communication en temps réel augmente. En tant que nouveau protocole de communication en temps réel, WebSocket a progressivement attiré l'attention et l'utilisation des développeurs. Cet article utilisera PHP comme langage de développement pour présenter les concepts de base de WebSocket et fournira un guide de développement d'introduction adapté aux débutants pour aider les lecteurs à implémenter les fonctions WebSocket à partir de zéro. 2. WebSocket

La refactorisation est un processus très important lors de l'écriture de code PHP. À mesure qu’une application se développe, la base de code devient de plus en plus volumineuse et difficile à lire et à maintenir. La refactorisation vise à résoudre ce problème et à rendre le code plus modulaire, mieux organisé et extensible. Lorsque nous refactorisons le code, nous devons prendre en compte les aspects suivants : Style du code Le style du code est un point très important. Garder votre style de codage cohérent rendra votre code plus facile à lire et à maintenir. Veuillez suivre les normes de codage PHP et être cohérent. Essayez d'utiliser un outil de vérification de style de code tel que PHP

PHP est un langage de programmation côté serveur très populaire et largement utilisé pour le développement Web. Dans le développement Web, le traitement d’images est une exigence très courante, et il est également très simple d’implémenter le traitement d’images en PHP. Cet article présentera brièvement le guide d'introduction au traitement d'images PHP. 1. Exigences environnementales Pour utiliser le traitement d'images PHP, vous avez d'abord besoin du support de la bibliothèque PHPGD. La bibliothèque fournit des fonctions pour écrire des images dans des fichiers ou les exporter vers un navigateur, recadrer et redimensionner des images, ajouter du texte et créer des images en niveaux de gris ou les inverser. donc
