【问题标题】:How to assign local variable value to variable of a function [Three.js] JSON Loader如何将局部变量值分配给函数的变量 [Three.js] JSON Loader
【发布时间】:2013-04-29 11:28:00
【问题描述】:

我正在尝试将外部 JSON 模型加载到场景中,并尝试将其值放入名为 head 的变量中,因此希望将其添加到场景中。

我做的是这样的

    var loader = new THREE.JSONLoader();

    this.head = loader.load( "eagle2.js", function( geometry ) {

        var material = new THREE.MeshPhongMaterial(), head;
        head = new THREE.Mesh( geometry, material );
        head.scale.set( 200, 200, 200 );
        head.position.y = 0;

        return head;
    } );

    this.mesh.add(this.head);

我喜欢做的是加载 JSON 模型并将所有网格放入我当前所在函数的 head 变量中。但是,当我运行上面的代码时,它会在 firebug 中显示类型错误。模型加载成功,但错误是这样的

TypeError: a 未定义 三.js 55号线

我应该怎么做才能修复这个错误?

【问题讨论】:

  • 移动 this.mesh.add(this.head); 不会有问题在函数内部而不是返回 head 变量。发生的事情是 head 被分配在回调函数内部,并且在您返回时超出范围,因此您无权访问它。
  • 当我这样做时,它再次抛出错误说 TypeError: this is undefined Line 215 它在回调函数中不理解这一点
  • 你需要做的是添加“var scope = this;”就在您调用 loader.load 之前,然后在回调中使用变量范围。 IE。 scope.mesh.add (head) 作为回调内部的“this”已被重新定义。
  • 它有效:)。谢谢gaitat的回复

标签: javascript json three.js webgl


【解决方案1】:

JSONLoader 的方法加载不返回任何内容。相反,它对服务器进行异步调用并在回调函数中返回数据,因此正确的用法应该如下所示:

var self = this;
var loader = new THREE.JSONLoader();

loader.load( "eagle2.js", function( geometry ) {

    var material = new THREE.MeshPhongMaterial(), head;
    head = new THREE.Mesh( geometry, material );
    head.scale.set( 200, 200, 200 );
    head.position.y = 0;

    self.head = head;
    self.mesh.add(head);
} );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多