2

我尝试通过数组声明变量以在 dat.Gui 控制器中使用它们。这是我的尝试:

<script>
  window.Horizontale = 300;
  window.Vertikale = 300;
  window.A = new Array();

  for (var i=1; i<7; i++) {
    window.A[i] = false;
  }

  window.onload = function() {
    var gui = new dat.GUI();
    gui.add(window, 'Horizontale', 0, 600);
    gui.add(window, 'Vertikale', 0, 600);

    for (var i=1; i<7; i++) {
      gui.add(window, A[i]);
    }
    gui.remember(window);
  };
</script>

数组中的变量不会出现在 GUI 中。我对Javascript真的很陌生,所以也许这只是声明的问题?

4

1 回答 1

2

在这一行:

gui.add(window, A[i]);

…<code>add() 在对象上查找名称由 指定window的属性,在这种情况下计算结果为。A[i]false

但是,没有名为falseon的属性window。因此,您需要在某处使用所需名称指定对象的属性,然后您可以为每个属性分配您想要作为附加参数传递的值add()——在这种情况下,false会给您一个处于未选中状态的复选框。

因此,假设您想要 6 个名为 1 - 6 的未选中复选框,您可以做一些事情,但它们都涉及向某个对象添加 6 个命名属性。这是使用第二个对象来保存控制器名称的一种方法,它将替换您的第二个for循环:

for (var i=1; i<7; i++) {
  controller_names[i] = A[i];
  gui.add(controller_names, i, A[i]);
}

但是,这可能无法很好地与保存设置功能配合使用——dat.gui 似乎只能保存在 gui 对象本身上定义的控件的设置,如下所述:为动态添加的控件保存 dat.gui 预设?

...在这种情况下,您可以尝试类似这样的操作:

<script>
  window.onload = function() {

    var gui = new dat.GUI();
    gui.Horizontale = 300;
    gui.Vertikale = 300;
    gui.A = new Array();

    for (var i=1; i<7; i++) {
      gui.A[i] = false;
    }

    gui.add(gui, 'Horizontale', 0, 600);
    gui.add(gui, 'Vertikale', 0, 600);

    for (var i=1; i<7; i++) {
      gui.add(gui.A, i, gui.A[i]);
    }
    gui.remember(gui);
  };
</script>
于 2014-06-24T17:55:57.153 回答