PixiJS 修煉指南 - 01. 啟程-環(huán)球?qū)崟r
簡介
什么是 PixiJS
PixiJS 是一個使用便捷且高效的2D渲染引擎——沒錯,它不是大而全的游戲引擎,而是更輕量的渲染引擎。
【資料圖】
這也使得它更專注于做好高效的2D渲染工作,給予WebGL高效渲染,實現(xiàn)上萬對象渲染的粒子效果;同時也提供了更高的自由度,可用于做任何游戲類型的渲染層,甚至僅僅用于宣傳頁面的2D動畫繪制。
同時,作為渲染引擎,它又比純粹的 Canvas 使用起來更為便捷,可以直接通過操作 Sprite
、Container
、Graphics
等對象的屬性完成畫面中渲染效果的更新。
這樣輕量易上手而又高效的渲染引擎,對于快速搭建輕量級的H5小游戲或者游戲 demo 來說可謂再合適不過。
而且,從2014年10月的第一個版本發(fā)布至今已過去近十年,仍然在不斷更新迭代。2022年的 PixiJS v6 開始更是提供了 TypeScript 的支持,提供了內(nèi)部對象更加方便的智能提示支持,也讓大型項目使用 TS 開發(fā)后更加規(guī)范和可維護。最新的 v7 更是拋棄了各種歷史包袱,更新到了現(xiàn)代化的前端項目生態(tài),并且改進了一些歷史 API(比如 interactive
),提供新的更深入優(yōu)化項目性能的能力。
對于諸如骨骼動畫、游戲濾鏡、物理引擎、跨平臺框架等需求,PixiJS 也有各種第三方工具、插件的支持,可擴展性也十分優(yōu)秀。
為什么寫這篇文章
這樣優(yōu)秀的工具,卻可能因為官方團隊人力有限無暇顧及文檔維護,或是覺得都是基本的開發(fā)概念不需要再重新寫文檔贅述,官方的文檔較為簡陋,基本只是羅列 API 的參考手冊。
對于之前沒太多了解的新同學(xué)來說,上手可能要走不少彎路。
于是就想在個人學(xué)習(xí)的筆記基礎(chǔ)上,梳理一個從基礎(chǔ)概念開始的學(xué)習(xí)流程供大家參考,希望能對有需要的同學(xué)有所幫助。
搭建項目
首先,我們來搭建一個使用 PixiJS 渲染的游戲項目。
方法 1. 靜態(tài)引用 dist 資源
如果只是想快速體驗,可以參考官方文檔指南,在頁面內(nèi)通過 <script>
標簽引入 PixiJS 的 dist 文件后,直接在靜態(tài)項目內(nèi)體驗使用 PixiJS:
<script src="https://pixijs.download/release/pixi.js"></script><script> const { Application } = window.PIXI; const app = new Application({ width: 640, height: 360, backgroundColor: 0x6495ed, }); document.body.appendChild(app.view);</script>
這一方式的優(yōu)點是快速可用。
但缺點也很明顯,沒有構(gòu)建環(huán)境的支持無法使用 TypeScript 等相關(guān)能力,也不具備 Tree Shaking 優(yōu)化項目產(chǎn)物大小等前端構(gòu)建項目的常用特性。
方法 2. 基于 npm 包構(gòu)建(推薦)
這一途徑則是在現(xiàn)有的前端構(gòu)建項目中,通過 npm/pnpm 安裝 PixiJS,再 import 需要的模塊到頁面內(nèi)進行開發(fā)。
優(yōu)點是可以完整地使用所有 PixiJS 應(yīng)有的能力,以及前端構(gòu)建項目所具有的所有便捷特性。缺點是搭建最初的項目結(jié)構(gòu)稍微需要花一點時間。
推薦使用 Vite 創(chuàng)建一個基本的 Vanilla + TypeScript 項目,再安裝 pixi.js
和幾個常用的 PixiJS 基本子包:
$ npm create vite@latest my-pixi-demo$ cd my-pixi-demo$ npm install -S pixi.js @pixi/utils
然后清空項目的入口腳本(一般為 src/main.ts),修改為:
import { Application } from "pixi.js";const app = new Application({ width: 640, height: 360, backgroundColor: 0x6495ed,});document.body.appendChild(app.view as HTMLCanvasElement);
啟動開發(fā)構(gòu)建服務(wù):
$ npm run dev
點擊打開出現(xiàn)的開發(fā)預(yù)覽頁面鏈接,不出意外的話,就能看到游戲的畫布出現(xiàn)在瀏覽器內(nèi)了。
開始工作
創(chuàng)建成員
剛才我們搭建完項目后,創(chuàng)建了一個 PixiJS 提供的 Application
對象,它就是我們開發(fā)的 游戲應(yīng)用了。
只不過目前它里面空空如也,只是繪制了一個指定背景色和寬高尺寸的空畫布。
接下來我們就要往里面加入各種成員,讓它熱鬧起來。
import { Application, Graphics, Sprite, Text,} from "pixi.js";const app = new Application({ width: 640, height: 360, backgroundColor: 0x6495ed,});document.body.appendChild(app.view as HTMLCanvasElement);// 創(chuàng)建文本成員const slogan = new Text("Hello, developer!", { fill: 0xffffff, fontSize: 32,});slogan.position.set(20, 20);// 創(chuàng)建圖形成員const sloganBg = new Graphics();sloganBg.position.set(10, 10);sloganBg.lineStyle(4, 0x333333, .25);sloganBg.beginFill(0xefefef, .5);sloganBg.drawRoundedRect(0, 0, slogan.width + 20, slogan.height + 20, 10);sloganBg.endFill();app.stage.addChild(slogan, sloganBg);// 創(chuàng)建精靈成員const sprite = Sprite.from("https://hk.krimeshu.com/sprite-minion.png");sprite.anchor.set(0.5, 0.5);sprite.position.set(app.screen.width / 2, app.screen.height / 2);app.stage.addChild(sprite);
效果大致如下:
基本概念
上面的例子中,除了之前提到的 Application
之外,主要有以下幾個新面孔:
Text
Graphics
Sprite
以及 Application
的幾個成員:
顯然,Text
、Graphics
和 Sprite
將會是我們之后開發(fā)游戲常用的成員類型。其中的 Text
和 Graphics
顧名思義很好理解,就是 文本和 圖形。而 Sprite
其實也是它的字面意思“精靈”,它是具有圖形材質(zhì)和一系列屬性、操作方法的成員對象,是我們在游戲中直接操作的基礎(chǔ)單元之一。
1. 容器與層級
如果查看他們的 type 聲明就會發(fā)現(xiàn),它們具有這樣的繼承派生關(guān)系:
符號
->
表示繼承。
Graphics -> ContainerSprite -> ContainerText -> Sprite -> Container
可見它們都屬于一個共同的祖先類別 Container
,而 Container
又繼承于更原始的 DisplayObject
。
可推測 DisplayObject
是 PixiJS 中可用于繪制的 可顯示對象,應(yīng)該是渲染底層操作的基礎(chǔ)單位。
而 Container
是在 DisplayObject
的基礎(chǔ)上具有類似 Web 節(jié)點性質(zhì)的樹形結(jié)構(gòu)對象。整個游戲需要繪制的成員,都以嵌套的樹形結(jié)構(gòu)最終掛載于 app.stage
這個頂級 Container
之下。
實際上因為 PixiJS 沒有 CSS 的層級概念,繪制時其實就是按照遍歷整個 app.stage
的樹形結(jié)構(gòu),從上到下、從前到后進行繪制,后繪制對象覆蓋先繪制的對象的優(yōu)先級來決定層級覆蓋關(guān)系。
Graphics
、Sprite
和 Text
則是在 Container
基礎(chǔ)上,擁有更多特化后的繪制能力和操作方法的可顯示對象具體子類。將它們的實例通過 addChild
加入到游戲的 app.stage
中,就會被 PixiJS 繪制出來,最終出現(xiàn)在我們眼前了。
const text1 = new Text("...");const text2 = new Text("...");// ...app.stage.addChild( text1, text2, //...);
2. 屏幕
除了 app.stage
之外,上面還用到了 app.screen
和 app.view
這兩個 Application
的屬性。
通過查看類型定義,我們發(fā)現(xiàn)前者的類型是 Rectangle
,即矩形,對其的官方定義為:
Rectangle
對象是一個由它左上角的 原點(x, y)
和自身 寬度width
+高度height
定義的區(qū)域。
而 app.screen
就是我們整個游戲應(yīng)用的矩形渲染區(qū)域,平時游戲中只有位于這個區(qū)域內(nèi)的可顯示對象才能被用戶在頁面上看到。
3. 畫布
最后的 app.view
則是 PixiJS 應(yīng)用的渲染器所持有的 Canvas 畫布對象引用。
在我們的例子中,因為創(chuàng)建 Application
時沒有傳入畫布對象,所以 PixiJS 內(nèi)部會幫我們創(chuàng)建符合指定屬性的畫布,并掛載在 app
實例的 view
屬性上。在這一切完成之后,我們最后將創(chuàng)建的 app.view
畫布通過 appendChild()
加入到頁面的 DOM 樹內(nèi)。
同樣的,我們也可以不使用自動創(chuàng)建的畫布,而是使用頁面上已有的 Canvas 畫布對象來創(chuàng)建 Application
應(yīng)用對象:
const canvas = document.querySelector("#cvsMyGame");const app = new Application({ view: canvas, width: canvas.width, height: canvas.height,});
這個例子里,如果我們不將 canvas 的寬高傳給 Application
的構(gòu)造參數(shù),PixiJS 將會用一個默認的尺寸創(chuàng)建游戲,并修改為 canvas 的新寬高。所以還是需要獲取后賦值傳入,稍顯啰嗦。
4. 更多適配
如果我們的游戲是面向移動端設(shè)備開發(fā)的話,還需要增加一個分辨率參數(shù),以適配高分辨率設(shè)備的像素密度:
const app = new Application({ view: canvas, width: canvas.width, height: canvas.height, resolution: window.devicePixelRatio || 2,});
不過如果我們的游戲應(yīng)用與網(wǎng)頁視口的尺寸始終保持一致(即所謂的“全屏游戲”)的話,其實可以也不用傳入這么多參數(shù),只需要這樣配置:
const app = new Application({ view: canvas, resizeTo: window, autoDensity: true,});
通過 resizeTo
屬性指定應(yīng)用畫布跟隨網(wǎng)頁窗口尺寸,還可以在用戶屏幕旋轉(zhuǎn)、調(diào)整窗口尺寸后由 PixiJS 自動調(diào)整畫布尺寸,以適配用戶設(shè)備的最新畫面狀態(tài)。
——不過頁面內(nèi)的成員坐標和尺寸并不會按新舊尺寸的比例進行調(diào)整更新,畢竟實際游戲場景的成員數(shù)可能相當多,而且不同成員的定位適配策略通常并不相同,還是需要在檢測到對應(yīng) resize
事件后自行調(diào)整。
這次我們創(chuàng)建了一個基本的 PixiJS 游戲應(yīng)用,并對一些基礎(chǔ)概念進行了說明。
但這個基本 demo 中還是有不少東西沒有說清楚,并且這個應(yīng)用的代碼也沒有合理組織,之后我們將在這個基礎(chǔ)上繼續(xù)補充和完善。
如果有什么紕漏與謬誤歡迎指出~
圖片
-
PixiJS 修煉指南 - 01.
環(huán)球熱推薦:呼吸閥工作原理
歷史新高!農(nóng)行業(yè)績發(fā)布透露
-
白衣天使的意思解釋_白衣天
全球通訊!推薦一款輕量級全
科創(chuàng)板IPO新增63家按下“暫
20122013英超積分榜_2010英
天天視點!最新大學(xué)生秋游活
恒大3月銷售額暴增至102億
-
菲律賓停止和ICC合作,此前
【焦點熱聞】有驚喜也有遺憾
軟銀將1.787億股阿里股份轉(zhuǎn)
《哈哈哈哈哈》第三季化身旅
美媒:被起訴是特朗普的“政
開封市順河回族區(qū)軍地聯(lián)合為
-
云南景洪回應(yīng)旅拍店拉客不成
天天報道:四川2025基本實現(xiàn)
青海:“稅費管家”讓稅費服
國際學(xué)校ib課程體系是什么?
2023中國化工園區(qū)可持續(xù)發(fā)展
移民中國的條件和費用標準_
精彩推送
- PixiJS 修煉指南 - 01. 啟程-環(huán)球?qū)崟r
- 滬硅產(chǎn)業(yè)股東嘉定開發(fā)、中科園區(qū)擬合計減持不超1%:快看
- 環(huán)球熱推薦:呼吸閥工作原理_帶你了解一下呼吸閥
- 歷史新高!農(nóng)行業(yè)績發(fā)布透露了哪些看點...
- 天天短訊!明發(fā)集團:2022年綜合收入約105.684億元
- 全球關(guān)注:德信中國:2022年總收入約人民幣221.45億元
- 白衣天使的意思解釋_白衣天使的意思
- 全球通訊!推薦一款輕量級全棧式開源測試平臺!
- 全球視點!佳兆業(yè)未來三年灣區(qū)舊改供貨1530億增長價值有望持續(xù)釋放
- 天天實時:合景泰富:2022年實現(xiàn)收入134.52億元
- 環(huán)球快報:建業(yè)地產(chǎn):2022年收益約為人民幣240.83億元
- 融信中國:2022年實現(xiàn)收入300.59億元_新消息
- 廣東省環(huán)境保護基金會成立20周年 持續(xù)拓寬環(huán)保事業(yè)綠色發(fā)展路徑
- 科創(chuàng)板IPO新增63家按下“暫停鍵”原因均系財報過期 焦點日報
- 中奧到家:2022年收益約為人民幣17.02億元
- 世界速讀:融信服務(wù):2022年總收益約為人民幣8.76億元
- 20122013英超積分榜_2010英超積分榜_世界熱頭條
- 環(huán)球微資訊!首批四單REITs擴募項目獲中國證監(jiān)會變更注冊批復(fù)
- 大悅城地產(chǎn):2022年實現(xiàn)收入208.31億元
- 北京市掛牌兩宗住宅用地,總起拍價56.3億元,涉及大興區(qū)、豐臺區(qū)
- 天天視點!最新大學(xué)生秋游活動策劃書 大學(xué)生秋游活動策劃書十四篇(優(yōu)秀)
- 世界視訊!宋都服務(wù):2022年實現(xiàn)收入2.68億元
- 恒大3月銷售額暴增至102億
- 遠洋服務(wù):2022年歸屬股東凈利潤人民幣7540萬元 熱點在線
- 熱點評!長沙越秀湘江星匯城百萬新房漏水達38天 業(yè)主:我又不是魚
- 深圳今年首批供地:5宗地塊攬金72億元 平均溢價率10.13%
- 弟弟兩個月給女主播打賞13萬元 姐姐:這是父母攢給他做手術(shù)的錢!_全球熱點
- 百事通!一次購車100輛! 優(yōu)信二手車合肥大賣場迎大買家
- 網(wǎng)絡(luò)視聽大咖說①葉蓁蓁:人類不能被人工智能取代
- 女子在長沙梵汐醫(yī)美祛斑不成反遭“毀容” 誰來為我的皮膚買單 全球速讀
- 菲律賓停止和ICC合作,此前菲被其指責(zé)“反人類”,認為ICC在干涉和攻擊菲律賓的國家主權(quán)具體是什么情況_全球熱文
- 恒生電子漲停 機構(gòu)凈買入4.03億元 每日視訊
- 【全球速看料】美圖公司港股跌9% 2022年無形資產(chǎn)減值虧損為4億
- 世界速看:保持雙輪驅(qū)動戰(zhàn)略聚焦 新城控股2022年實現(xiàn)營收1154.57億
- 全球速訊:給孩子買保險 到他們80歲才能拿回“本金”?泰康人壽屢遭投訴
- 房屋中介賣房賺傭金 青島大云谷金茂府開發(fā)商翻臉不認人?
- 壽險與長護險責(zé)任轉(zhuǎn)換業(yè)務(wù)試點5月1日起開展
- 【焦點熱聞】有驚喜也有遺憾 高原試駕2023款坦克500
- 破發(fā)股萬凱新材擬發(fā)不超27億可轉(zhuǎn)債 去年上市募30.6億
- “PR融創(chuàng)01”將于2023年3月31日進行現(xiàn)金支付及小額兌付
- 今日熱文:《北京市征收集體土地房屋補償管理辦法》公開征求意見
- 環(huán)球滾動:建發(fā)房地產(chǎn):擬發(fā)行10億元公司債券
- 力盟科技港股上市首日漲20% 募資凈額0.97億港元
- 中科博賽干細胞公司相關(guān)人被罰100萬 利用互聯(lián)網(wǎng)傳銷_每日時訊
- 三星醫(yī)療關(guān)聯(lián)收購5醫(yī)院 上交所問詢溢價率高3標的虧損:全球短訊
- 心動公司去年凈虧損收窄至5.53億元 港股股價漲0.75% 熱資訊
- 天天通訊!海昌海洋公園:2022年凈虧損14.08億元
- 軟銀將1.787億股阿里股份轉(zhuǎn)讓給子公司
- 順鑫牽手將亮相第108屆全國糖酒會 共助行業(yè)更好發(fā)展
- 網(wǎng)絡(luò)游戲板塊漲3.87% 昆侖萬維漲19.95%居首|看熱訊
- 土地托管、以工代賑成“時尚” 內(nèi)蒙古鄉(xiāng)村為富民振興配上“金鑰匙”
- 德方納米擬發(fā)不超35億可轉(zhuǎn)債 2019上市三度募資共48億 今日關(guān)注
- 每日聚焦:食品加工制造板塊漲0.81% 有友食品漲9.25%居首
- 蒙牛2022業(yè)績|夯實基本盤,常溫液奶持續(xù)擴大市場份額
- 【全球報資訊】“未來之城”雄安:海納百川 匯聚人才
- 傳媒板塊漲3.91% 昆侖萬維漲19.95%居首-環(huán)球報道
- 生物醫(yī)藥板塊漲0.99% 新天地漲7.84%居首-環(huán)球速遞
- 【天天播資訊】成都、上海軌道交通實現(xiàn)二維碼跨區(qū)域互聯(lián)互通
- 年報解讀 | 合景悠活:市場化發(fā)展成果顯著 穩(wěn)健發(fā)展穿越周期
- 《哈哈哈哈哈》第三季化身旅行種草機 接水游戲笑翻全網(wǎng) 環(huán)球觀熱點
- 環(huán)球觀焦點:河南洛陽生態(tài)環(huán)境局:強化自動監(jiān)控幫扶 著力解決企業(yè)難題
- 【快播報】湖南14個城市環(huán)境空氣平均優(yōu)良天數(shù)比例為81.6%
- 美媒:被起訴是特朗普的“政治生涯災(zāi)難” 對候選人資格是致命問題|看熱訊
- 北大荒集團洪河農(nóng)場有限公司 引企入“鄉(xiāng)” 走出一條合作發(fā)展新路
- 補貼收入是否繳納增值稅?政府補貼收入是什么意思?
- I Will Always Love You歌詞是什么?原唱是誰? 環(huán)球播資訊
- 最新消息:檸檬茶怎么做?檸檬茶的做法步驟是什么?
- 有沒有關(guān)于中秋節(jié)的古詩?中秋節(jié)的古詩集錦|當前速遞
- 陜西漢中經(jīng)四川巴中至南充鐵路嘉陵江特大橋順利合龍
- 全球快播:學(xué)古箏有什么好處?學(xué)習(xí)古箏的方法是什么?
- 陜西:加強濕地保護 維護濕地生態(tài)功能
- 全球觀點:五年級數(shù)學(xué)學(xué)科工作計劃怎么寫?五年級數(shù)學(xué)教學(xué)工作計劃(通用20篇)最新
- 補貼收入屬于什么科目?補貼收入的會計分錄介紹
- 演講稿如何寫?態(tài)度決定一切演講稿范文5篇:環(huán)球速遞
- 河南省環(huán)委辦主任、生態(tài)環(huán)境廳廳長李哲到鄢陵縣調(diào)研縣城建成區(qū)黑臭水體治理工作
- 市場趨勢怎么分析出來?分析市場趨勢的方法介紹 市場趨勢怎么描述
- 環(huán)球今日訊!關(guān)于負責(zé)培養(yǎng)人意見范文匯總 詳情內(nèi)容快來看看吧!
- 北京啟動存量住房交易“帶押過戶”模式|全球頭條
- 經(jīng)典謎語大全帶答案 快來欣賞一下吧!
- 中國的地名謎語你能猜對幾個?中國最全的地名謎語及答案一覽
- 三年級數(shù)學(xué)上冊教學(xué)有什么計劃?三年級人教版數(shù)學(xué)上冊教學(xué)計劃10篇最新:要聞
- 大學(xué)輔導(dǎo)員的工作計劃4篇 感興趣的小伙伴快來看看吧!
- 馬尾羅星塔公園你去過嗎?馬尾羅星塔公園景點介紹|天天熱文
- 觀焦點:關(guān)于自然山水的經(jīng)典古詩詞有哪些?自然山水的經(jīng)典古詩詞大全
- 市場趨勢怎么寫范文?市場趨勢調(diào)研報告怎么寫?市場趨勢是什么意思?
- 有關(guān)中秋節(jié)謎語大全及答案大全 有喜歡的小伙伴快來看看吧!-焦點短訊
- 黨員的自傳怎么寫?黨員的個人自傳范文介紹
- 快消息!寫給山區(qū)里的孩子一封信大全6篇 以供大家參考
- st板塊所有股票怎么找?st板塊漲停潮意味什么?炒ST板塊的風(fēng)險分析
- 促銷活動計劃方案范文五篇 希望大家喜歡
- 為什么黑雞蛋比普通雞蛋貴兩三倍?烏雞蛋和普通雞蛋的區(qū)別是什么?-消息
- 韜光養(yǎng)晦的意思是什么?韜光養(yǎng)晦的成語典故介紹
- 環(huán)球簡訊:10首經(jīng)典傷感英文歌曲排行榜 有你喜歡的嗎?
- 世界微資訊!網(wǎng)卡怎么免流?網(wǎng)卡免流的方法是什么?
- 天天要聞:163郵件格式怎么寫?QQ郵箱格式怎么寫?
- 全球訊息:高中生軍訓(xùn)心得體會怎么寫?高中生軍訓(xùn)心得體會最新7篇
- 家常涼面怎么做?家常涼面的做法是什么?:全球看熱訊
- 【全球熱聞】棉麻布料會縮水嗎?棉麻布料的優(yōu)缺點是什么?
- 關(guān)于墻面裝修 這些誤區(qū)你一定要知道:世界百事通
- 《活學(xué)活用厚黑學(xué)》是誰?是哪一年出版的圖書?
金融
財經(jīng)
要聞
公司
吉卜力工作室如今已加入到主題公園的浪潮,并于11月1日正式對公眾開放全球首個項目,將《龍貓》等經(jīng)典作品的場景復(fù)原至現(xiàn)實世界。對于吉卜
詳細>>隨著在線旅游企業(yè)數(shù)量的不斷增多,售賣不合理低價旅游產(chǎn)品、違規(guī)利用用戶個人信息等問題也時有發(fā)生。11月1日,文旅部發(fā)布《文化和旅游部關(guān)
詳細>>兩個小時,這是越南全國首票榴蓮從裝車到運送至我國廣西崇左友誼關(guān)口岸的時間。得益于一體化供應(yīng)鏈,2021年,中國與越南進出口貿(mào)易額達到23
詳細>>11月1日,北京商報記者梳理發(fā)現(xiàn),截至9月末,10家A股上市農(nóng)商行資產(chǎn)規(guī)模均有所擴大,重慶農(nóng)商行、上海農(nóng)商行仍以萬億元總資產(chǎn)位居前列。營
詳細>>西貝餐飲集團(以下簡稱西貝)在兒童餐的道路上越走越深。11月1日,北京商報記者從西貝獲悉,其將推出西貝兒童餐零售產(chǎn)品。目前,部分西貝門
詳細>>新一期麻辣粉和逆回購操作如期公布。9月15日,央行發(fā)布消息稱,為維護銀行體系流動性合理充裕,開展4000億元中期借貸便利(MLF)操作和20億元
詳細>>