先來看一下three.js包的目錄結構:
我們使用的時候,可以一次性import所有的功能,也可以按需引入,全依賴three.module.js這個文件對three.js的功能作了模塊化處理;
但是,該模塊化處理的功能僅僅是引入了src下面的所有功能類,實際開發中,我們還需要拓展包(examples)里面的諸多功能,但是如果還像之前一樣直接實例化對象的話,會報如下錯誤:
這是因為,PointerLockControls這個方法(類)是在拓展包里面的,而three.module.js並沒有將其引入(如果你是通過script標簽引入該功能的話,后面的內容可以無視),所以,我們需要手動引入該功能模塊。
一、PointerLockControls.js模塊化
先打開three/examples/js/controls/PointerLockControls.js文件,它是這樣的:
因為是在THREE這個對象上添加的屬性(方法),所以通過script標簽直接引入是沒有任何問題的,但是我們現在要做的是將其模塊化:
①將該文件中所有THREE.PointerLockControls替換成PointerLockControls;
②防止該功能模塊有對其他three.js模塊的依賴,引入three.js
③文件開頭用var申明PointerLockControls;
④文件末尾添加export;
二、three.module.js引入拓展模塊
打開three/build/three.module.js文件至末尾,添加該模塊:
三、在你的頁面直接調用該模塊吧
這樣,你就可以像調用其他three.js模塊類一樣,直接調用該拓展類了。