为动态添加的控件保存 dat.gui 预设?
Posted
技术标签:
【中文标题】为动态添加的控件保存 dat.gui 预设?【英文标题】:Save dat.gui presets for dynamically added controls? 【发布时间】:2014-06-20 20:53:43 【问题描述】:我正在向 dat.gui 界面动态添加控件,但“保存设置”功能无法识别它们。
var mygui = new dat.GUI();
mygui.remember(mygui);
// standard way of adding a control
mygui.control1 = 0.0;
var control = mygui.add(mygui, 'control1', -1, 1);
// adding controls dynamically
var myArray = ['control2', 'control3'];
var controls = [];
for (x in myArray)
controls[myArray[x]] = 0.0;
var newControl = mygui.add(controls, myArray[x], -1, 1);
所有控件都按预期工作,但是当我单击齿轮图标时,设置 JSON 仅包含第一个控件,或者我以正常方式添加的任何其他控件:
"preset": "Default",
"closed": false,
"remembered":
"Default":
"0":
"control1": 0.5,
,
"folders":
我假设我以某种方式混淆了 remember() 功能,有什么想法吗?
【问题讨论】:
【参考方案1】:for 循环中的行应该是:
mygui[myArray[x]] = 0.0;
var newControl = mygui2.add(mygui, myArray[x], -1, 1);
add
函数的第一个参数执行两个功能:它既是第二个参数的 source(要添加的控件的名称,在本例中为 myArray[x ]) 也是目的地。您可以将控件名称存储在您喜欢的任何位置,但如果第一个参数不是 gui,remember()
函数将不知道控件,它们将不会添加到 gui 的 __rememberedObjects
属性中或保存在 JSON 对象中。
【讨论】:
绝妙的答案!如果有人碰巧确实想要 GUI不记住某个设置,他们应该另外设置newControl.isModified = function() return false; ;
以防止它在预设名称旁边显示星号。
以上是关于为动态添加的控件保存 dat.gui 预设?的主要内容,如果未能解决你的问题,请参考以下文章