【问题标题】:Typescript and ThreeJS, add to the scene inside loaderTypescript 和 ThreeJS,添加到 loader 里面的场景
【发布时间】:2017-07-04 19:25:14
【问题描述】:

我有以下代码:

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。

【问题讨论】:

    标签: typescript three.js


    【解决方案1】:

    因为加载回调中的 this 已更改。需要调用 bind 或使用转换为 bind 调用的 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 );
    }));
    

    【讨论】:

    • 完全正确!由于 Three.js 的工作原理,我不得不对第二个代码 sn-p 做些小改动,但逻辑就是你。为了将对象添加到场景中,必须将其转换为网格,因此您可以根据需要添加材质。有效的代码如下:pastebin.com/RdEnttaH
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 2021-03-15
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2014-04-29
    • 2014-02-22
    相关资源
    最近更新 更多