dat.GUI创建多个具有相同名称的按钮

时间:2015-03-17 22:54:07

标签: javascript dat.gui

我尝试使用dat.GUI创建多个具有相同名称的按钮" ShowCoord",这可能吗?我现在拥有的是:

    for (i = 0; i < overlay.numElements; i ++)
    {
        var length = overlay.elementNumVertices[i];
        var subObj = {
            'name' : overlay.elementNames[i],
            'index' : i,
            'numVertices': overlay.elementNumVertices[i],
            "ShowCoord" : function(){
                console.log("i is " + subObj['index']);
                var verts = overlay.elementVertices[i];
                for(var j = 0; j < subObj['numVertices']; j ++)
                {
                    console.log("The coordinates are " + verts[3*j] + ", "+ verts[3*j+1] +", "+verts[3*j+2]);
                }
            }

        };
        subObjArray.push(subObj);
    }

    for(i = 0; i < subObjArray.length; i ++)
    {
        var currObj = subObjArray[i];
        var subGui = gui.addFolder(currObj['name']);
        subGui.add(currObj, 'numVertices');
        subGui.add(currObj, "ShowCoord");
    }

我现在已经显示了正确的currObj [&#39; name&#39;]和currObj [&#39; numVertices&#39;]。但所有&#34; ShowCoord&#34;按钮只包含最后一个subObj的信息(所以console.log(&#34;我是&#34; + subObj [&#39;索引&#39;])每次打印148即使我点击不同的按钮)。我怎样才能使它工作?非常感谢!

1 个答案:

答案 0 :(得分:1)

尝试在subGui之外移动for loop并修改您的代码,这样就不会重新分配subGui varialbe。

var subGui = new dat.GUI();
for(i = 0; i < subObjArray.length; i ++)
{
    var currObj = subObjArray[i];
    subGui.addFolder(currObj['name']);// <--- work on this line
    subGui.add(currObj, 'numVertices');
    subGui.add(currObj, "ShowCoord");
}

否则,将始终使用for loop

的最后一个迭代元素重新定义它

注意:这只是一个提示,我无法从您的代码中得出更多结论。