我尝试使用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 ['name']和currObj ['numVertices']。但是所有“ ShowCoord”按钮仅包含最后一个subObj的信息(因此,即使我单击其他按钮,console.log(“ i为” + subObj ['index'])也会每次打印出148)。我该如何运作?非常感谢!
尝试移至的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
注意:这只是一个提示,我无法从您的代码中得出更多结论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句