2

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

我花了很长时间在源代码中四处乱窜,我也找不到任何关于创建新控制器类型的最小路径的信息。

具体来说,我希望 DAT.GUI 使用我的新控制器之一,只要受控属性是具有“标志”属性的对象(表示使用自定义控件,以及对象需要哪种特定类型的自定义控件。 )

我以前的方法是使用现有控制器的代码作为我的新自定义控制器的基础,在我能看到的地方复制和修改适用。我复制了对布尔类型的所有引用(为了简单起见),但最终复制粘贴了大量代码并绝望地四处寻找我不太理解的补丁,只是试图让我的对象不导致整个事情破坏。到目前为止没有成功。

然后我尝试背负颜色控制器功能,因为我发现它们已经设置为检测“对象”类型的属性,但是颜色功能的复杂性是压倒性的,所以现在我来到了这里作为我最后的手段。

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

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

4

1 回答 1

2

我使用自己的 CustomController 来解决问题。请参阅我的代码

使用:

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

请参阅使用示例。目前我要求将我的代码合并到 dat.gui

于 2019-04-23T01:28:42.770 回答