2017-07-04 25 views
0

我有以下代碼:打字稿及ThreeJS,添加到裏面的場景裝載機

export class LandingPageComponent implements OnInit { 
scene: THREE.Scene; 
(...) 
ngOnInit() { 
(...) 
this.scene = new THREE.Scene(); 
(...) 
var loader = new THREE.JSONLoader(); 
loader.load("../../assets/fire_lion.json",function (obj) { 
    this.scene.add(obj); // The line that's giving me trouble 
}); 

場景定義和工作,但是當我嘗試運行這段代碼,我得到它說的是一個錯誤場景未被聲明。這很有意義,因爲「this」不再引用這個類,但是我怎樣才能將該對象添加到場景中呢?

在此先感謝! PS:使用ObjectLoader只是給我一個錯誤消息,說我應該使用JSONLoader。

回答

2

因爲在負載回調中已經改變了。需要調用綁定或使用TypeScript語法來轉換綁定調用。

loader.load("../../assets/fire_lion.json",function (obj) { 
    this.scene.add(obj); 
}.bind(this)); // bind here 

loader.load("../../assets/fire_lion.json", (obj) => { 
    this.scene.add(obj); 
})); 
+0

這是完全正確的!由於Three.js的工作原理,我不得不對第二個代碼片段做一些小改動,但邏輯就是你。 爲了添加一個對象到場景中,它必須被轉換成一個網格,所以你可以添加材質,如果你想。 工作的代碼如下: https://pastebin.com/RdEnttaH –