亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
安裝
一個基本示例
常見的Matter.js模塊
最後的想法
首頁 web前端 js教程 Matter.js入門:簡介

Matter.js入門:簡介

Mar 08, 2025 am 12:53 AM

Getting Started With Matter.js: Introduction

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創(chuàng)建剛體並為其分配質(zhì)量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。

Matter.js支持所有主流瀏覽器。此外,它也適用於移動設(shè)備,因為它可以檢測觸摸並具有響應(yīng)能力。所有這些功能都使其值得您投入時間學(xué)習(xí)如何使用該引擎,因為這樣您就可以輕鬆創(chuàng)建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎(chǔ)知識,包括其安裝和用法,並提供一個可運行的示例。

安裝

您可以使用NPM之類的包管理器通過以下命令安裝Matter.js:

npm install matter-js

您還可以從CDN獲取庫的鏈接,並像這樣直接將其包含在您的項目中:

<!-- CDN鏈接 -->

Matter.js經(jīng)常發(fā)布更新,這可能需要您對代碼進行一些小的修改才能使其正常工作。本教程中的示例基於0.18.0版本。

一個基本示例

學(xué)習(xí)Matter.js的最佳方法是查看一些實際代碼並了解其工作原理。在本節(jié)中,我們將創(chuàng)建一些物體,並逐行介紹所需的代碼。

const Engine = Matter.Engine,
    Render = Matter.Render,
    Runner = Matter.Runner,
    Bodies = Matter.Bodies,
    Composite = Matter.Composite;

const iEngine = Engine.create();
const iRunner = Runner.create();

const iRender = Render.create({
  element: document.body,
  engine: iEngine,
  options: {
    width: 800,
    height: 400,
    wireframes: false,
    background: "white"
  }
});

const boxA = Bodies.rectangle(400, 200, 80, 80);
const ballA = Bodies.circle(380, 100, 40, 10);
const ballB = Bodies.circle(460, 10, 40, 10);
const ground = Bodies.rectangle(400, 380, 810, 60, { isStatic: true });

Composite.add(iEngine.world, [boxA, ballA, ballB, ground]);

Render.run(iRender);

Runner.run(iRunner, iEngine);

我們首先為項目中可能需要的全部Matter.js模塊創(chuàng)建別名。

Matter.Runner模塊使您可以訪問遊戲循環(huán),以便連續(xù)更新引擎和您的世界。

Matter.Composite模塊允許您創(chuàng)建物體的集合、約束或其他復(fù)合對象。一個複合體可以包含單個物體或整個模擬。

下一行使用Matter.Engine模塊的create([settings])方法創(chuàng)建一個新的引擎。類似地,我們還創(chuàng)建了一個新的運行器和一個新的渲染器。上面方法中的settings參數(shù)實際上是一個鍵值對對象,用於覆蓋與引擎相關(guān)的某些屬性的默認值。對於我們的示例,我們已將所有內(nèi)容保留為默認值。

例如,您可以控制世界中所有物體的全局時間縮放因子。設(shè)置小於1的值將導(dǎo)致世界以慢動作交互。類似地,大於1的值將使世界快節(jié)奏。您將在本系列的下一個教程中了解有關(guān)Matter.Engine模塊的更多信息。

之後,我們使用Matter.Render模塊的create([settings])方法創(chuàng)建一個新的渲染器。與Engine模塊一樣,上面方法中的settings參數(shù)是一個用於指定參數(shù)的不同選項的對象。您可以使用element鍵指定庫應(yīng)插入畫布的元素。類似地,您還可以使用canvas鍵指定應(yīng)渲染Matter.js世界的畫布元素。

有一個engine鍵,您可以使用它來指定應(yīng)用於渲染世界的引擎。還有一個options鍵,它實際上接受一個對像作為其值。您可以使用此鍵為不同的參數(shù)設(shè)置值,例如畫布的widthheight。您還可以通過將wireframe鍵的值分別設(shè)置為truefalse來打開或關(guān)閉線框。我們還通過將背景的值設(shè)置為白色,使我們世界中的畫布顏色為白色。

接下來的幾行創(chuàng)建將在我們的世界中交互的不同物體。這些物體是在Matter.js中使用Matter.Bodies模塊創(chuàng)建的。在這個例子中,我們只使用circle()rectangle()方法創(chuàng)建了兩個圓和一個矩形。其他方法也可以用來創(chuàng)建不同的多邊形。

創(chuàng)建物體後,我們需要使用Matter.Composite模塊中的add()方法將它們添加到我們選擇的世界上。將必要的物體添加到我們的世界後,我們只需要使用各自模塊中的run()方法運行運行器和渲染器。這基本上是您需要創(chuàng)建和渲染Matter.js世界中的所有代碼。

本節(jié)開頭處的代碼創(chuàng)建了以下結(jié)果。

常見的Matter.js模塊

Matter.js中有超過20個不同的模塊。所有這些模塊都提供不同的方法和屬性,這些方法和屬性對於創(chuàng)建不同類型的模擬非常有用,並允許您與它們交互。其中一些模塊處理碰撞,而另一些模塊處理渲染和模擬。

上一節(jié)中的示例使用了四個不同的模塊來處理渲染、模擬和物體的創(chuàng)建。在本節(jié)中,您將了解Matter.js中一些常用模塊的作用。

  • Engine: 您需要引擎來更新Matter.js世界的模擬。 Engine模塊提供不同的方法和屬性,允許您控制不同引擎的行為。
  • Render: 需要渲染器才能在模擬中創(chuàng)建用戶可以看到的實際物體。您可以使用它來開發(fā)支持精靈等的基本遊戲。
  • Runner: 您模擬的任何世界中的物體都將不斷地相互作用。 runner模塊處理引擎和世界的這些連續(xù)更新。
  • Bodies: Bodies模塊包含不同的方法,可以幫助您創(chuàng)建具有常見形狀(如圓形、矩形或梯形)的剛體。
  • Body: 此模塊為您提供不同的方法和屬性,用於創(chuàng)建和操作您使用Bodies模塊中的函數(shù)創(chuàng)建的剛體。此模塊允許您縮放、旋轉(zhuǎn)或平移單個物體。它還具有允許您指定不同物體的速度、密度或慣性的函數(shù)。由於有很多函數(shù),本系列的第三個教程只討論Body模塊中可用的方法和屬性。
  • Composites: 與Bodies模塊類似,此模塊包含不同的方法,您可以使用這些方法創(chuàng)建具有常見配置的複合物體。例如,您可以使用Composites模塊中的單個方法創(chuàng)建矩形盒子的堆?;蚪鹱炙?。
  • Composite: Composite模塊具有允許您創(chuàng)建和操作複合物體的各種方法和屬性。您可以在本系列的第四個教程中閱讀有關(guān)CompositeComposites模塊的更多信息。
  • Constraint: 此模塊允許您創(chuàng)建和操作約束。您可以使用約束來確保兩個物體或一個固定的世界空間點和一個物體保持固定的距離。這類似於通過鋼筋連接兩個物體。您可以修改這些約束的剛度,以便桿開始更像彈簧。 Matter.js在創(chuàng)建牛頓擺或鍊式複合體時使用約束。
  • MouseConstraint: 此模塊為您提供不同的方法和屬性,使您可以創(chuàng)建和操作鼠標約束。當您希望世界中的不同物體與用戶交互時,這很有用。

最後的想法

本教程旨在向您介紹Matter.js庫??紤]到這一點,我已經(jīng)提供了庫的功能和安裝的快速概述。涉及兩個圓和一個方塊的基本示例顯示了使用該庫創(chuàng)建簡單模擬是多麼容易。

由於Matter.js有很多模塊,每個模塊都向引擎添加其自身獨特的方法,因此我已經(jīng)對一些常用模塊進行了簡短的總結(jié)。本系列的其餘部分將重點介紹更詳細地講解這些常用模塊。

這篇文章已更新,其中包含來自Monty Shokeen的貢獻。 Monty是一位全棧開發(fā)人員,他還喜歡編寫教程和學(xué)習(xí)新的JavaScript庫。

以上是Matter.js入門:簡介的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機制通過標記-清除算法自動管理內(nèi)存,以減少內(nèi)存洩漏風(fēng)險。引擎從根對像出發(fā)遍歷並標記活躍對象,未被標記的則被視為垃圾並被清除。例如,當對像不再被引用(如將變量設(shè)為null),它將在下一輪迴收中被釋放。常見的內(nèi)存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關(guān)注:Oracle與Deno的商標糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標之爭Oracle試圖註冊“JavaScript”商標的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標,他認為JavaScript是一個開放標準,不應(yīng)由Oracle

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團隊規(guī)模、項目生命週期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達式(IIFE) 立即在JavaScript中立即調(diào)用功能表達式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義後立即執(zhí)行的函數(shù)表達式,用於變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達式,並緊隨其後的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達式、結(jié)

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鍊式調(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果並可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

See all articles