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。
在下面的例子中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。