Paper.js入門指南:動畫和圖像
到目前為止,在本系列中,我已經介紹了 Paper.js 中的項目和項目、路徑和幾何圖形以及使用者互動。該庫還允許您為項目中的各種項目製作動畫。如果將其與根據使用者輸入進行操作的能力相結合,您可以創建一些非常酷的效果。本教學將介紹如何在 Paper.js 中為項目設定動畫。
本教學的後面部分也將介紹影像處理以及如何處理單一像素的顏色。該庫還使您能夠從向量建立柵格,這將在最後介紹。
動畫基礎
Paper.js 中的所有動畫都由 onFrame
事件處理程序處理。處理程序內的程式碼每秒執行最多 60 次。每次執行後視圖都會自動重繪。逐漸改變函數內部的一些屬性可以創造一些非常好的效果。
onFrame
處理函數也接收 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
的值一般會接近 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()
函數將永遠位於 -1 和 1 之間。
以下示範顯示了我們的動畫方塊,順便說一下,它不再是正方形,這要歸功於我們的 onFrame
處理程序中的程式碼。我建議您嘗試為多邊形建構函數以及 sin
函數的參數嘗試不同的值,看看它們如何影響演示中的最終動畫。 </p>
<图>
圖片基礎
#Paper.js 中的影像稱為柵格。您可以像任何其他項目一樣變換和移動它們。要在專案中使用圖像,您首先必須使用常用的 img
標籤將其新增至網頁的標記中,並為其指定 id
。這個 id
隨後被傳遞給 new Raster(id)
建構子。
請記住,您正在使用的圖像需要已加載,並且應託管在與您的專案相同的網站上。使用其他網域上託管的映像將導致安全性錯誤。在本教程中,我們將操作以下圖像:
要访问上图中各个像素的颜色,您可以使用 栅格。 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在開發網頁應用程式時,開發人員需要處理大量的資料和配置。這些資料和配置可以儲存在資料庫中,也可以使用文字檔案來儲存。文字檔通常採用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函式庫的支援。該庫提供了將圖像寫入檔案或輸出到瀏覽器的功能、裁剪和縮放圖像、添加文字、以及使圖像變為灰度或反轉等功能。因此
