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