它是如何在内部工作的
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);