2

在下面的示例中,B 类扩展了 A 类,它继承了一个 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 为类的继承变量工作?

4

1 回答 1

1

简短的故事是,我认为你不会让它像这样工作。

查看ControlP5 源代码,当您调用该plugTo()函数时,它会在后台使用反射。

具体来说,它使用该getDeclaredFields()函数,它只返回子类中的字段,而不是任何父类。

在我看来,你有三个选择:

停止使用继承。ControlP5 的设计初衷不是像这样处理继承。所以只要去简单的类,你会没事的。

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

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

于 2017-01-08T17:51:45.337 回答