2017-01-08 6 views
2

次の例では、BクラスはAクラスを拡張し、変数をintに継承します。ControlP5は、plugToオブジェクトの継承された変数を変更しません。

cp5スライダはBオブジェクトのインスタンスに接続され、assign変数は "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; 
     } 
    } 

コンソールに表示される値は常に0であるため、スライダは変数を変更していません。

クラスの継承された変数に対してcontrolP5を動作させるにはどうすればよいですか?

答えて

1

短編小説は、あなたがこのように動作するようになるとは思わないということです。

the ControlP5 sourceを見ると、plugTo()関数を呼び出すと、フードの下での反射が使用されます。

具体的には、getDeclaredFields()関数を使用します。この関数は、子クラスのフィールドのみを返し、親クラスは返しません。

停止使用して継承:

私はそれを参照してください方法は、次の3つのオプションがあります。 ControlP5はこのような継承で動作するようには設計されていません。だから、単純なクラスで行っても大丈夫です。

この機能をリクエストしてください。これについて機能要求を提出できます。しかし、これは典型的なユースケースではないので、これは最優先事項ではないと私は推測しています。

自分でやってください。 ControlP5はオープンソースです。だからあなたは自分で変更を加えることができます。あるいは、簡単な回避策を書くこともできます。おそらく、子クラスに何とかマッピングする関数を持つ異なるクラスかもしれません。

関連する問題