【问题标题】:TypeError: Cannot read property 'object' of null at recallSavedValue in dat.gui.module.js:3218TypeError:无法在 dat.gui.module.js:3218 中的recallSavedValue 处读取null 的属性“对象”
【发布时间】:2021-02-23 08:50:39
【问题描述】:

在 three.js 中,我试图通过自定义值添加 gui。但它给了我错误。 这是我的代码

var arm = document.getElementById('arm');
var model_arr = [];
model_arr['narm'] = (arm)? arm:0;
function init(){
...create scene, camera, load obj,mtl render it etc.
initGUI();
}
function initGUI() {
initGUICalled = true;   
if (typeof model_arr !== 'undefined' && model_arr.length > 0) {
    params = {
    Arm: (model_arr['narm'])? model_arr['narm']:20.75,
    resetval: function() { resetBody(); }
    };  
}
// Set up dat.GUI to control targets
lower = gui.addFolder( 'Lower Measurement' );       
let ArmCtrl = lower.add( params, 'Arm', 18.75, 22.75 ).step( 0.21 ).name("Arm in Inch").listen();
ArmCtrl.onChange( function ( value ) {
    mesh.morphTargetInfluences[ 0 ] = (value - 20.75)/2.1;
} );

lower.close();
gui.close();
        
}

function resetBody(){
    initGUICalled = true ;
    params.Arm = 20.75;
    mesh.morphTargetInfluences[ 0 ] = 0;
            
}

我正在尝试从 model_arr 对象中赋予价值。所以为此我已经尝试过了。

let ArmCtrl = lower.add( params, 'Arm', 18.75, 22.75 ).step( 0.21 ).name("Arm in Inch").listen();
ArmCtrl.onChange( function ( value ) {
    mesh.morphTargetInfluences[ 0 ] = (value - model_arr['narm'])/2.1;
} );

出现错误

未捕获的类型错误:folder.add(...).step 不是函数 在 new_women_xl_initGUI

我已经检查了这些参考 Saving parameters with dat.gui seems broken? Uncaught TypeError: $(...).steps is not a function 但运气不好。

【问题讨论】:

    标签: three.js dat.gui


    【解决方案1】:

    使用model_arr,您可以在将其用作数组和对象之间来回切换:

    // Here you initialize it as an array
    var model_arr = [];
    
    // Here you're accessing it as an object, not adding any values to the array
    model_arr['narm'] = (arm) ? arm : 0;
    
    // The array's length is still 0, so params never gets a value
    if (model_arr.length > 0) {
        params = {
            Arm: xxx
        };
    }
    
    // Now when you try to access params.Arm, it doesn't exist
    let ArmCtrl = lower.add( params, 'Arm', 18.75, 22.75 )
    

    如果您想使用数组,请在变量的整个生命周期内坚持使用数组。如果要创建对象,请从新变量开始,以免混淆两者。

    如果要在数组末尾添加值,you could use the .push() method:

    var narm = (arm) ? arm : 0;
    
    // Add value to the end of the array
    model_arr.push(narm);
    
    // Now the array's length is 1
    

    【讨论】:

    • 是的,它对我有用。再想得到浮点值需要使用 parseFloat var arm = parseFloat(document.getElementById('arm').value);。再次感谢您挽救了我的一天。
    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2022-01-12
    • 2021-12-04
    • 2021-12-17
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多