ControlP5 不修改 plugTo 对象的继承变量

ControlP5 doesn't modify inherited variables of plugTo object

在下面的例子中Bclass扩展了Aclass,它继承了int一个变量。

cp5滑块插入到一个B对象的实例中,赋值变量为"a"。

    import controlP5.*;
    ControlP5 cp5;
    B b;
    void setup()
    {
      size(200,200);
      b = new B();
      cp5 = new ControlP5(this);
      cp5.addSlider("a")
         .setPosition(20,20)
         .setRange(0,255)
         .plugTo(b,"a");
    }

    void draw()
    {
       println(b.a , frameCount);
    }

    class B extends A 
    {
      B()
      {
        super();

      }
    }
    class A 
    {
      int a;
      A()
      {
        a  = 0;
      }
    }

控制台中打印的 a 值始终为 0,因此滑块不会修改 a 变量。

如何让 controlP5 对 class 的继承变量起作用?

简而言之,我认为您不会让它像这样工作。

查看 the ControlP5 source,当您调用 plugTo() 函数时,它在后台使用了反射。

具体来说,它使用了 getDeclaredFields() 函数,它只 returns 子 class 中的字段,而不是任何父 classes.

在我看来,您有以下三种选择:

停止使用继承。 ControlP5 并非设计用于像这样使用继承。所以只要使用简单的 classes 就可以了。

请求此功能。您可以为此提交功能请求。但我猜这不会是一个高优先级,因为它不是一个典型的用例。

自己动手做。 ControlP5 是开源的。因此,您可以自己进行更改。或者您可以编写一个简单的解决方法,也许是一个不同的 class,其函数以某种方式映射到子 class。