Paper.js入门指南:动画和图像
到目前为止,在本系列中,我已经介绍了 Paper.js 中的项目和项目、路径和几何图形以及用户交互。该库还允许您为项目中的各种项目制作动画。如果将其与根据用户输入进行操作的能力相结合,您可以创建一些非常酷的效果。本教程将介绍如何在 Paper.js 中为项目设置动画。
本教程的后面部分还将介绍图像处理以及如何处理单个像素的颜色。该库还使您能够从矢量创建栅格,这将在最后介绍。
动画基础知识
Paper.js 中的所有动画均由 onFrame
事件处理程序处理。处理程序内的代码每秒执行最多 60 次。每次执行后视图都会自动重绘。逐渐改变函数内部的一些属性可以创建一些非常好的效果。
onFrame
处理函数还接收 event
处理函数还接收 event
对象。该对象具有三个属性,为我们提供与动画相关的信息。
第一个是 event.count
,它告诉我们处理程序执行的次数。第二个是 event.delta
,它为我们提供了自上次执行处理程序以来经过的总时间。第三个是 event.time
,它为我们提供了自第一帧事件以来经过的时间。
您可以在处理程序中为许多属性设置动画。在我们的示例中,我将旋转三个矩形并更改中心矩形的色调。考虑下面的代码:
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); }
从上面的代码片段可以明显看出,为矩形设置动画所需的实际代码非常少。对于矩形 A,我们在每次执行 onFrame
处理程序时将色调增加 10 倍 event.delta
。 event.delta
处理程序时将色调增加 10 倍 event.delta
。 event.delta
的值一般会接近 0.01。如果我没有将其值乘以 10,则需要很长时间才能注意到颜色的变化。
每次执行代码时,我都会将每个矩形旋转 2 度。如果我们使用值 event.time
来旋转矩形,一段时间后旋转会变得非常快。
您还可以为各个片段设置动画,而不是一次为整个路径或项目设置动画。这个过程本身非常简单。您可以使用 path.segments
返回构成路径的所有段的数组。可以通过提供 index
值来访问各个段。在进一步讨论之前,我希望您看一下下面的代码。
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; }
在这里,我们首先使用 Path.RegularPolygon(center, Sides, radius)
构造函数创建一个正方形。 sides
参数确定多边形的边数。 radius
参数决定多边形的大小。我还将 completelySelected
属性设置为 true
,以便您可以看到各个点。
在 onFrame
处理程序内,我使用 for 循环迭代所有段,并将它们的 x 坐标设置为等于基于其索引计算的值。在 Math.sin()
函数内使用 event.time
函数不会产生任何与极值相关的问题,因为 Math.sin() 的值不会产生任何与极值相关的问题。 sin()
处理程序内,我使用 for 循环迭代所有段,并将它们的 x 坐标设置为等于基于其索引计算的值。在 Math.sin()
函数内使用
Math.sin() 的值不会产生任何与极值相关的问题。 sin()
函数将始终位于 -1 和 1 之间。
onFrame
处理程序中的代码。我建议您尝试为多边形构造函数以及 sin
以下演示显示了我们的动画正方形,顺便说一下,它不再是正方形,这要归功于我们的 </p> 处理程序中的代码。我建议您尝试为多边形构造函数以及 sin
函数的参数尝试不同的值,看看它们如何影响演示中的最终动画。<图>
img
标签将其添加到网页的标记中,并为其指定 id
。这个 id
随后被传递给 new Raster(id)
Paper.js 中的图像称为栅格。您可以像任何其他项目一样变换和移动它们。要在项目中使用图像,您首先必须使用常用的
请记住,您正在使用的图像需要已加载,并且应托管在与您的项目相同的网站上。使用其他域上托管的图像将导致安全错误。在本教程中,我们将操作以下图像:
要访问上图中各个像素的颜色,您可以使用 栅格。 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 市场中提供的资源。
如果您使用此库创建了一些有趣的东西,请在评论中分享您的作品。
以上是Paper.js入门指南:动画和图像的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

随着人工智能技术的发展,自然语言处理(NaturalLanguageProcessing,NLP)已经成为了一项非常重要的技术。NLP可以帮助我们更好地理解和分析人类语言,从而实现一些自动化的任务,比如智能客服、情感分析、机器翻译等。在本文中,我们将介绍使用PHP进行自然语言处理的基本知识和工具。什么是自然语言处理自然语言处理是一种利用人工智能技术来处

随着互联网的不断发展,前端和后端技术的需求也越来越大。而作为一名后端开发人员,掌握PHP是必不可少的。在PHP开发中,我们经常需要进行请求和响应的处理。本篇文章将围绕着PATCH请求和响应进行探讨,为PHP的初学者提供实用的指南。一、PATCH请求PATCH请求是一个HTTP请求方法,它用于更新已经存在的资源。在HTTP协议中,有一种方法是使用PUT请求进行

Java是一种广泛应用于软件开发的编程语言,其简洁的语法和强大的功能使其成为许多开发者的首选。然而,对于初学者来说,学习Java可能会感到有些困难。本篇文章将为Java开发初学者提供一个指南,帮助他们从入门到放弃。学习基本语法Java的基本语法包括变量、数据类型、运算符、条件语句和循环语句等。初学者应该从这些基本概念开始学习,并编写简单的代码示例来加深理解。

PHP是一种流行的服务器端脚本语言,常用于Web开发,而YAML则是一种轻量级的数据序列化格式,用于配置文件和数据交换。在本篇文章中,我们将探讨PHP如何与YAML结合使用,以及如何入门。PHP和YAML在开发Web应用程序时,开发人员需要处理大量的数据和配置。这些数据和配置可以存储在数据库中,也可以使用文本文件来存储。文本文件通常采用XML、JSON或YA

PHP技术入门指南:淘宝商品详情API文档解读引言:PHP作为一种广泛应用于Web开发的编程语言,拥有着庞大的用户群体和丰富的扩展库。其中,使用PHP开发淘宝商品详情API是一个非常实用且常见的需求。本文将针对这一需求,给出一份淘宝商品详情API文档的详细解读,为初学者提供入门指南。一、什么是淘宝商品详情API淘宝商品详情API是淘宝开放平台提供的一种接口,

从零开始:PHPWebSocket开发入门指南与功能实现教程一、引言随着互联网的发展,实时通信的需求越来越大。而WebSocket作为一种新的实时通信协议,逐渐受到广大开发者的关注和使用。本文将以PHP作为开发语言,为大家介绍WebSocket的基本概念,并提供一份适合初学者的开发入门指南,帮助读者从零开始实现WebSocket的功能。二、WebSocke

在写PHP代码时,重构是一个非常重要的过程。随着应用程序的增长,代码库会变得越来越庞大,难以阅读和维护。重构是为了解决这个问题,让代码更加模块化,并可以更好地组织和扩展。当我们重构代码时,需要考虑以下几个方面:代码风格代码风格是很重要的一点。保持你的代码风格一致性会让代码更易于阅读和维护。请遵循PHP代码规范,并保持一致。尝试使用代码风格检查工具,例如PHP

PHP是一种非常流行的服务器端编程语言,它被广泛用于Web开发。在Web开发中,图像处理是一个非常常见的需求,而在PHP中实现图像处理也是很简单的。本文将简要介绍PHP图像处理的入门指南。一、环境要求要使用PHP图像处理,首先需要PHPGD库的支持。该库提供了将图像写入文件或输出到浏览器的功能、裁剪和缩放图像、添加文字、以及使图像变为灰度或反转等功能。因此
