![](/img/trans.png)
[英](Intergrate P5.js and Three.js) --- Create a ThreeJS scene with animations from P5.js library?
[英]How to remove a p5.js instance when three.js assets load?
我正在將 three.js gltf 文件加載到我的頁面上,並且想使用 p5 草圖作為預加載 animation。 這是我制作的一個簡單的 animation,因此在重載 gltf 時應該可以正常使用。 目前我正在使用我的加載管理器來設置一個 boolean 觸發器,但它根本不會被三個 js 觸發。
這是一些說明交互的示例代碼。
P5
function playSketch(){
var sketch = function(p){
p.setup = function(){
code;
}
p.draw = function(){
code;
}
}
var myp5 = new p5(sketch);
}
3js ,在 function main() 里面
const manager = new THREE.LoadingManager();
manager.onStart = function ( url, itemsLoaded, itemsTotal ) {
console.log( 'Started loading file: ' + url + '.\nLoaded ' + itemsLoaded + ' of ' + itemsTotal + ' files.' );
};
manager.onLoad = function ( ) {
console.log( 'Loading complete!');
loadSketch = true;
};
manager.onProgress = function (itemsLoaded, itemsTotal ) {
console.log( 'Loading file: ' + '.\nLoaded ' + itemsLoaded + ' of ' + itemsTotal + ' files.' );
};
function setBool(){
if(loadSketch){
console.log('this works');
myp5.remove();
}
}
main();
playSketch();
setBool();
不幸的是,這不起作用, setBool 沒有被觸發並且草圖繼續運行。 加載完成后如何刪除我的 p5 實例? 謝謝你。
看起來有兩個問題。 第一個是在調用main()
和playSketch()
之后立即調用setBool()
一次。 three.js LoadingManager
不太可能立即調用onLoad
處理程序,因此當loadSketch
運行時setBool
仍然為 false。 要解決此問題,您可以讓onLoad
處理程序直接調用.remove()
function,或者如果您不想緊密耦合這些東西,您可以將回調 function 傳遞給您的main
ZC1C4252078E68384F1AB457A。 另一個更笨拙的解決方案是使用setInterval
反復調用setBool
。 只是不要嘗試使用 while 循環來等待loadSketch
為真,因為這會導致頁面凍結(javascript 是單線程的)。
第二個問題是myp5
變量的 scope。 它在playSketch
function 中聲明,因此setBool
function 無法訪問它。
注意:如果您在問題中包含一個包含最小可重現示例的可運行片段,那么在答案中向您顯示修復會更容易。
我的錯誤沒有指定:
const gltfLoader = new GLTFLoader(manager);
實例化我的加載器時(呃。)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.