它是如何在內部工作的
A-Frame 中的每個元素都繼承自 <a-node>
,即 AFRAME.ANode
原型。ANode
控制載入和初始化順序。對於要初始化的元素(無論是 <a-assets>
,<a-asset-item>
,<a-scene>
還是 <a-entity>
),其子元素必須已經初始化。節點自下而上初始化。
<a-assets>
是一個 ANode
,它等待它的孩子在載入之前載入。由於 <a-assets>
是 <a-scene>
的孩子,因此場景必須等待所有資產載入。我們還為 <a-entity>
新增了額外的載入邏輯,這樣如果我們定義了 <a-assets>
,它們就會明確等待 <a-assets>
載入。
<a-asset-item>
使用 THREE.FileLoader
來獲取檔案。three.js 將返回的資料儲存在 THREE.Cache
中。每個 three.js 載入器都繼承自 THREE.FileLoader
,無論是 ColladaLoader
,OBJLoader
,ImageLoader
等。他們都可以訪問並瞭解中心的 THREE.Cache
。如果 A-Frame 已經提取了一個檔案,A-Frame 將不再嘗試獲取它。
因此,由於我們阻止資產上的實體初始化,因此在實體載入時,所有資產都已經被提取。只要我們定義 <a-asset-item>
s,並且實體使用某種形式 THREE.FileLoader
獲取檔案,那麼快取將自動工作。
訪問 FileLoader
和 Cache
如果我們想要更仔細地傾聽,要訪問 three.js FileLoader
:
console.log(document.querySelector('a-assets').fileLoader);
要訪問儲存 XHR 響應的快取:
console.log(THREE.Cache);