目錄
動畫基礎
圖片基礎
光栅化项目
最终想法
首頁 CMS教程 &#&按 Paper.js入門指南:動畫和圖像

Paper.js入門指南:動畫和圖像

Sep 03, 2023 am 09:05 AM
入門指南 paperjs 動畫和圖像

到目前為止,在本系列中,我已經介紹了 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.deltaevent.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) 建構子。

請記住,您正在使用的圖像需要已加載,並且應託管在與您的專案相同的網站上。使用其他網域上託管的映像將導致安全性錯誤。在本教程中,我們將操作以下圖像:

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP中的自然語言處理入門指南 PHP中的自然語言處理入門指南 Jun 11, 2023 pm 06:30 PM

隨著人工智慧技術的發展,自然語言處理(NaturalLanguageProcessing,NLP)已經成為了非常重要的技術。 NLP可以幫助我們更好地理解和分析人類語言,從而實現一些自動化的任務,例如智慧客服、情緒分析、機器翻譯等。在本文中,我們將介紹使用PHP進行自然語言處理的基本知識和工具。什麼是自然語言處理自然語言處理是一種利用人工智慧技術來處

PHP入門指南:PATCH請求與回應 PHP入門指南:PATCH請求與回應 May 23, 2023 pm 04:21 PM

隨著網路的不斷發展,前端和後端技術的需求也越來越大。而身為後端開發人員,掌握PHP是不可或缺的。在PHP開發中,我們經常需要進行請求和回應的處理。本篇文章將圍繞PATCH請求和回應進行探討,為PHP的初學者提供實用的指南。一、PATCH請求PATCH請求是一個HTTP請求方法,它用來更新已經存在的資源。在HTTP協定中,有一種方法是使用PUT請求進行

Java開發初學者指南:從入門到放棄 Java開發初學者指南:從入門到放棄 Sep 22, 2023 am 08:25 AM

Java是一種廣泛應用於軟體開發的程式語言,其簡潔的語法和強大的功能使其成為許多開發者的首選。然而,對於初學者來說,學習Java可能會感到有些困難。這篇文章將為Java開發初學者提供一個指南,幫助他們從入門到放棄。學習基本語法Java的基本語法包括變數、資料型態、運算子、條件語句和循環語句等。初學者應該從這些基本概念開始學習,並編寫簡單的程式碼範例來加深理解。

PHP入門指南:PHP和YAML PHP入門指南:PHP和YAML May 20, 2023 pm 08:21 PM

PHP是一種流行的伺服器端腳本語言,常用於Web開發,而YAML則是一種輕量級的資料序列化格式,用於設定檔和資料交換。在本篇文章中,我們將探討PHP如何與YAML結合使用,以及如何入門。 PHP和YAML在開發網頁應用程式時,開發人員需要處理大量的資料和配置。這些資料和配置可以儲存在資料庫中,也可以使用文字檔案來儲存。文字檔通常採用XML、JSON或YA

PHP初級指南:解析淘寶商品詳情API文檔 PHP初級指南:解析淘寶商品詳情API文檔 Jun 30, 2023 pm 06:22 PM

PHP技術入門指南:淘寶商品詳情API文件解讀引言:PHP作為一種廣泛應用於Web開發的程式語言,擁有龐大的使用者群體和豐富的擴充函式庫。其中,使用PHP開發淘寶商品詳情API是一個非常實用且常見的需求。本文將針對此需求,給予一份淘寶商品詳情API文件的詳細解讀,為初學者提供入門指南。一、什麼是淘寶商品詳情API淘寶商品詳情API是淘寶開放平台提供的一種接口,

從零開始:PHP WebSocket開發入門指南與功能實作教學 從零開始:PHP WebSocket開發入門指南與功能實作教學 Sep 12, 2023 am 10:51 AM

從零開始:PHPWebSocket開發入門指南與功能實作教學一、引言隨著網路的發展,即時通訊的需求越來越大。而WebSocket作為一種新的即時通訊協議,逐漸受到廣大開發者的關注與使用。本文將以PHP作為開發語言,為大家介紹WebSocket的基本概念,並提供適合初學者的開發入門指南,幫助讀者從零開始實現WebSocket的功能。二、WebSocke

PHP入門指南:程式碼重構 PHP入門指南:程式碼重構 May 26, 2023 pm 04:21 PM

在寫PHP程式碼時,重構是一個非常重要的過程。隨著應用程式的成長,程式碼庫會變得越來越龐大,難以閱讀和維護。重構是為了解決這個問題,讓程式碼更加模組化,並且可以更好地組織和擴展。當我們重構程式碼時,需要考慮以下幾個面向:程式碼風格程式碼風格是很重要的一點。保持你的程式碼風格一致性會讓程式碼更容易閱讀和維護。請遵循PHP程式碼規範,並保持一致。嘗試使用程式碼風格檢查工具,例如PHP

PHP影像處理入門指南 PHP影像處理入門指南 Jun 11, 2023 am 08:49 AM

PHP是一種非常流行的伺服器端程式語言,它被廣泛用於Web開發。在Web開發中,影像處理是一個非常常見的需求,而在PHP中實現影像處理也是很簡單的。本文將簡要介紹PHP影像處理的入門指南。一、環境需求要使用PHP影像處理,首先需要PHPGD函式庫的支援。該庫提供了將圖像寫入檔案或輸出到瀏覽器的功能、裁剪和縮放圖像、添加文字、以及使圖像變為灰度或反轉等功能。因此

See all articles