搜尋
首頁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 函數的參數嘗試不同的值,看看它們如何影響演示中的最終動畫。

圖片基礎

#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
WordPress作為大型網站的CMS有多可擴展?WordPress作為大型網站的CMS有多可擴展?May 12, 2025 am 12:08 AM

WordPressCanHandLeLArgeWebsiteswithCareFulplanningAndOptimization.1)USECACHINGTOREDUCESERVERVERLOAD.2)優化YourDataBaseRegularly.3)actimentAcdNtododistibuteContent.4))

WordPress的定製程度如何?WordPress的定製程度如何?May 11, 2025 am 12:11 AM

WordPress的定制化程度非常高,提供了廣泛的靈活性和可定制性。 1)通過主題和插件生態系統,2)利用RESTAPI進行前端開發,3)深入代碼層面進行修改,用戶可以實現高度個性化的體驗。然而,定制化需要掌握PHP、JavaScript、CSS等技術,且需注意性能優化和插件選擇,以避免潛在的問題。

WordPress作為CMS的核心功能是什麼?WordPress作為CMS的核心功能是什麼?May 10, 2025 am 12:15 AM

WordPressisanexcellentchoiceforaCMSduetoitsuser-friendlyinterface,extensiveecosystem,SEOcapabilities,scalability,andsupportivecommunity.1)Itsintuitivedashboardmakescontentmanagementeasyforallusers.2)Thevastarrayofthemesandpluginsallowsforextensivecus

使用WordPress管理內容有多容易?使用WordPress管理內容有多容易?May 09, 2025 am 12:11 AM

WordPressiser-FrightlyDuetLoitsIntuitiveInterfaceAndcms,whosparateContentFromDesign.itoffersArichTextedextEditorforeasyContentCreationAndialibraryFororRaryFororRory.itsflexeNhangedBancedBynhangedBynHangedBynumereNumerSandeMesandPlugins,elloverSandplugins,elloverOverUseCanimpActpercrance

WordPress如何在業務環境中使用?WordPress如何在業務環境中使用?May 08, 2025 am 12:04 AM

1)ITSUPPORTSE-CommerceWithPluginSlikeWooCommerce,允許ProductManagementAndAndPaymentProcessing.2)ITSERVESASASASACMSACMSACMSMSACMSMSACMSMASTRATATEBLOGS,增強SeoAndEngagement.3)

哪些類型的網站不適合WordPress?哪些類型的網站不適合WordPress?May 07, 2025 am 12:10 AM

WordPressIsnotIdeAlforHigh-TrafficWebsites,customAndCompleXapplications,安全性 - 敏感性plicestions,Real-Timedataprocessing,AndhighlyCustomizeduserInterfaces.forhigh-Trafficsites,USENEENEXT.JSORXOLX.JSORCOSTOMSOLTICTS; forCompleXapplications; forcomplexapplications; forcomplexapplications,optfordjangoorrub

您可以使用WordPress構建博客嗎?您可以使用WordPress構建博客嗎?May 06, 2025 am 12:03 AM

Yes,youcanbuildablogwithWordPress.1)ChoosebetweenWordPress.comforbeginnersorWordPress.orgformorecontrol.2)Selectathemetopersonalizeyourblog'slook.3)Usepluginstoenhancefunctionality,likeSEOandsocialmediaintegration.4)Customizeyourthemewithsimplecodetw

WordPress作為CMS平台的安全程度如何?WordPress作為CMS平台的安全程度如何?May 05, 2025 am 12:01 AM

WordPressCanbeseCureifManagedProperly.1)keepthewordPressCoreUpdatedTopatchVulnerabilities.2)vetandupdatepluginsandthemesfromreputables.3)EnforcestrongpasseTSandusetWordssandusetWordwordwo-factorauthenticaliation.4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中