欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PixiJS學(xué)習(xí)之常見圖形的繪制詳解

 更新時間:2023年02月20日 09:03:51   作者:前端西瓜哥  
pixijs 是一個強大的 Web Canvas 2D 庫,以其強大性能而著稱。這篇文章主要帶大家學(xué)習(xí)一下PixiJS是如何實現(xiàn)常見圖形繪制的,希望對大家有所幫助

pixijs 是一個強大的 Web Canvas 2D 庫,以其強大性能而著稱。其底層使用了 WebGL 實現(xiàn)了硬件加速,當(dāng)然如果不支持的話,也能回退為 Canvas。

本文使用的 pixijs 版本為 7.1.2。

Application

Application 代表一個 pixijs 應(yīng)用,對應(yīng)一個 Canvas。

創(chuàng)建一個 Application 實例:

const app = new PIXI.Application({ width: 640, height: 360 });

支持的構(gòu)造參數(shù)很多,這里列舉一些常用選項:

  • width / height:設(shè)置 Canvas 的寬高;
  • background:背景色,可以是數(shù)字或字符串,默認(rèn)為 0x000000,即黑色;
  • view:指定要應(yīng)用的 Cavans 元素,可以不提供,pixijs 會給你創(chuàng)建一個新的,你將它添加到 body 元素下就好;
  • resizeTo:跟隨某個容器元素的尺寸變化進行自適應(yīng),比如 window。設(shè)置后 width / height 配置項目失效;

更多高階配置看 官方 API 文檔

這里我沒有提供 view,所以我們要將 pixijs 給我們生成的 Canvas 元素掛到頁面上:

document.body.appendChild(app.view);

下面我們開始繪制圖形。

Graphics

Graphics 類常用于繪制一些比較基礎(chǔ)的圖形,比如矩形、圓形、線段等。除了繪制圖形,還可以用它來設(shè)置遮罩(mask)或點擊區(qū)域(hitArea)。

在一個 Graphics 下,不只是只能畫一個圖形,也可以畫多個圖形。

繪制矩形

繪制紅色填充色的矩形。

const rect = new PIXI.Graphics();
rect.beginFill(0xFF0044); // 設(shè)置填充色
rect.lineStyle(5, 0xFFFFFF); // 設(shè)置描邊線寬和顏色
rect.drawRect(100, 100, 200, 100); // 參數(shù)分別為 x, y, width, height
// 添加到 stage 下
app.stage.addChild(rect);

app.stage 是放置圖形的地方,也就是 “舞臺”。這里我們要通過 addChild 將創(chuàng)建的圖形加入進去,之后 pixijs 的渲染器會讀取到這個圖形進行繪制。

drawRect 是一種舊的寫法,看起來是直接在畫布上繪制矩形,但其實底層是創(chuàng)建一個 Rect 對象添加到圖形樹上,先不繪制,然后在圖形樹準(zhǔn)備好之后的渲染階段,再讀取該對象的數(shù)據(jù)并且繪制。這和 CanvasRenderingContext2D.fillRect 屬于不同的繪制機制,后者不會維護圖形樹狀態(tài)。

Graphics 本質(zhì)并不是繪制工具,而是構(gòu)建樹的工具,繪制的實現(xiàn)在其他地方。

另一種寫法,首先創(chuàng)建 PIXI.Rectangle 實例,這個實例只是描述一個矩形的屬性,本身并不能直接添加到 stage 上,需要通過 Graphics 的 drawShape 添加到 Graphics 上。

const rect = new PIXI.Graphics();
rect.beginFill(0xFF0044); // 設(shè)置填充色
rect.lineStyle(5, 0xFFFFFF); // 設(shè)置描邊線寬和顏色
const s = new PIXI.Rectangle(100, 100, 200, 100);
rect.drawShape(s);
// 記得添加到 stage 下
app.stage.addChild(rect);

繪制圓形

繪制圓形同理:

const circle = new PIXI.Graphics();
circle.beginFill(0x00FF44);
circle.lineStyle(5, 0xFFFFFF);
// 參數(shù):cx(中點), cy, radius
circle.drawCircle(100, 100, 50);

app.stage.addChild(circle);

效果:

有種嚴(yán)重的鋸齒感,這是因為 pixijs 默認(rèn)是不開抗鋸齒的,因為抗鋸齒處理要消耗額外的性能。

可以開啟全局的抗鋸齒能力:

const app = new PIXI.Application({ antialias: true, /* 其他配置項 */ });

開啟抗鋸齒后的圓形,肉眼可見地圓潤了:

繪制圓角矩形

代碼:

const roundedRect = new PIXI.Graphics();
roundedRect.beginFill(0xff0044);
roundedRect.lineStyle(5, 0xffffff);
// 參數(shù)為:x, y, width, height, radius
roundedRect.drawRoundedRect(100, 100, 200, 100, 16);
// 添加到 stage 下
app.stage.addChild(roundedRect);

效果:

繪制橢圓

代碼:

const ellipse = new PIXI.Graphics();
ellipse.beginFill(0xff0044);
ellipse.lineStyle(5, 0xffffff);
// 參數(shù):cx, cy, width, height
ellipse.drawEllipse(100, 100, 80, 40);
// 添加到 stage 下
app.stage.addChild(ellipse);

效果:

繪制線條

代碼:

const line = new PIXI.Graphics();
line.lineStyle(5, 0xffffff);
line.moveTo(100, 100);
line.lineTo(300, 250);
// 添加到 stage 下
app.stage.addChild(line);

效果:

繪制多邊形

代碼:

const polygon = new PIXI.Graphics();
polygon.beginFill(0xff0044);
polygon.lineStyle(5, 0xffffff);
// x1, y1, x2, y2, ...
polygon.drawPolygon(100, 100, 300, 250, 350, 50);
// 添加到 stage 下
app.stage.addChild(polygon);

效果:

繪制三階貝塞爾曲線

代碼:

const curve = new PIXI.Graphics();
curve.beginFill(0xff0044);
curve.lineStyle(5, 0xffffff);
curve.moveTo(100, 180)
// cpX, cpY, cpX2, cpY2, toX, toY 
curve.bezierCurveTo(90, 100, 210, 100, 300, 180)
// 添加到 stage 下
app.stage.addChild(curve);

效果:

到此這篇關(guān)于PixiJS學(xué)習(xí)之常見圖形的繪制詳解的文章就介紹到這了,更多相關(guān)PixiJS繪制常見圖形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生js實現(xiàn)半透明遮罩層效果具體代碼

    原生js實現(xiàn)半透明遮罩層效果具體代碼

    半透明遮罩層效果基本上都是使用插件實現(xiàn)的,下面為大家分享下使用原生js實現(xiàn)半透明遮罩效果,感興趣的朋友可以參考下哈,希望對你熟悉原生js有所幫助
    2013-06-06
  • 如何用JS獲取帶“\”字符串的中間值?

    如何用JS獲取帶“\”字符串的中間值?

    如何用JS獲取帶“\”字符串的中間值?...
    2007-02-02
  • Js中FileReader讀取文件內(nèi)容方法詳解(async/await)

    Js中FileReader讀取文件內(nèi)容方法詳解(async/await)

    這篇文章主要給大家介紹了關(guān)于Js中FileReader讀取文件內(nèi)容(async/await)的相關(guān)資料,FileReader是前端進行文件處理的一個重要的Api,特別是在對圖片的處理上,如果你想知道圖片的處理原理,你就永遠(yuǎn)不可能繞過它,需要的朋友可以參考下
    2023-11-11
  • JS+CSS實現(xiàn)美化的下拉列表框效果

    JS+CSS實現(xiàn)美化的下拉列表框效果

    這篇文章主要介紹了JS+CSS實現(xiàn)美化的下拉列表框效果,涉及javascript針對下拉列表框樣式的相關(guān)操作技巧,非常美觀大方,需要的朋友可以參考下
    2015-08-08
  • JavaScript實現(xiàn)點擊按鈕切換網(wǎng)頁背景色的方法

    JavaScript實現(xiàn)點擊按鈕切換網(wǎng)頁背景色的方法

    這篇文章主要介紹了JavaScript實現(xiàn)點擊按鈕切換網(wǎng)頁背景色的方法,涉及JavaScript基于鼠標(biāo)事件動態(tài)操作頁面元素樣式的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • js實現(xiàn)上傳圖片并顯示圖片名稱

    js實現(xiàn)上傳圖片并顯示圖片名稱

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)上傳圖片并顯示圖片名稱,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 小程序?qū)崿F(xiàn)分頁查詢列表的模板

    小程序?qū)崿F(xiàn)分頁查詢列表的模板

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)分頁查詢列表的模板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JS自定義右鍵菜單實現(xiàn)代碼解析

    JS自定義右鍵菜單實現(xiàn)代碼解析

    這篇文章主要介紹了JS自定義右鍵菜單實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié))

    TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié))

    這篇文章主要介紹了TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié)),今天我們再來實戰(zhàn)下官方推薦的新的vue狀態(tài)管理工具Pini,感興趣的小伙伴可以參考一下
    2022-06-06
  • 微信小程序?qū)崿F(xiàn)日歷打卡

    微信小程序?qū)崿F(xiàn)日歷打卡

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)日歷打卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論