扩展或定义新 dat.gui 属性 控制器的最佳方法?

Best approach for extending or defining new dat.gui property controllers?

我想向 DAT.GUI 实例添加一些新的 属性 控制器类型。

我花了很长时间研究源代码,但一无所获,在网上也找不到任何关于创建新控制器类型的最小路径的信息。

具体来说,只要受控 属性 是一个具有 "flag" 属性 的对象(表示使用自定义控件,以及对象需要哪种特定类型的自定义控件。)

我以前的方法是使用现有控制器的代码作为我新的自定义控制器的基础,复制和修改我可以看到的地方是适用的。我复制了所有对 Boolean 类型的引用(为了简单起见),但最终复制粘贴了大量代码并无可救药地四处寻找我并不真正理解的补丁,只是试图让我的对象不会导致整个事情崩溃。到目前为止还没有成功。

然后我尝试搭载 Color 控制器函数,因为我发现它们已经设置为检测 'Object' 类型的属性,但是 Color 函数的复杂性是压倒性的,所以现在我来这里是我最后的选择。

我能理解控制器本身是如何处理所有事件和更新的,只是正确定义新控制器并向 DAT.GUI 注册所需的步骤让我感到困惑。

如果没有解决方案,任何人都可以提供一些关于采取的方法的建议吗?或者,也许有人知道提供有关 API 以及如何扩展它的更多详细信息的在线资源。

我使用自己的 CustomController 来解决问题。看我的 code.

使用:

var gui = new dat.GUI(); gui.addCustomController(object, [property], [min], [max], [step]);

有关详细信息,请参阅 gui.add

并添加一些功能:

参数 object.constructor = function ( controller ) { //Add your custom elements into controller.domElement }

您也可以使用 gui.add(...) 添加自定义控制器。

使用:

var gui = new dat.GUI();
gui.add( new dat.GUI.CustomController( {
  constructor: function ( controller ) {
    //Add your custom elements into controller.domElement
},} ) );

使用的扩展版本。还添加了 NumberControllerSlider。

var gui = new dat.GUI();

//gui.add returns a NumberControllerSlider
var controllerPlayRate = gui.add( new dat.GUI.CustomController( {

    constructor: function ( controller ) {

        //Add your custom elements into controller.domElement

    },

} ), {

    playRate: 1,

}, 'playRate', 1, 25, 1 ).onChange( function ( value ) {

    //User has changed the NumberControllerSlider value

} );
//controllerPlayRate is NumberControllerSlider

看到一个example的使用。 目前我 request 将我的代码合并到 dat.gui