控制p5 slider.setRange()在子类中找不到

时间:2015-05-21 12:31:20

标签: processing control-p5

我试图在子类中设置滑块的范围,使用getController捕获相应的控制器,该工作正常,由我在打印中获得的返回值证明。但是controller.setRange()并没有被识别为函数。

是否只能在创建对象期间初始化范围,或者getController是否返回与我预期不同的对象?

谢谢!

  class Stepper
  {
String stepperName = "default";
int ID = motorID;
int stepperValue;

Stepper(String givenName) {
  stepperName = givenName;
  cp5.addSlider(stepperName)
    .setPosition(sliderPosX+(sliderWidth+100)*surgeonBotID, sliderPosY+90*servoList.length+30*(motorID-servoList.length))
      .setSize(sliderWidth, int(sliderHeight*0.5))
        //.setRange(0, 179)
          .setSliderMode(Slider.FLEXIBLE);

  println("Created new Stepper: "+stepperName+ " ID: "+ID);
  motorID++;
}

void setRange(float min, float max){
       println("object: "+cp5.getController(getStepperName()).getValue()); 
       cp5.getController(getStepperName()).setRange(min, max);
}
...
  }

1 个答案:

答案 0 :(得分:1)

通过咨询the API可以最好地回答这些问题。

getController()方法返回一个Controller。 Controller类没有setRange()函数。该实例恰好是Slider的实例,它是Controller的子类,但编译器无法知道这一点。这导致了您的错误。

您可以告诉编译器该实例确实是Slider 强制返回的值Slider,然后您可以访问Slider定义的方法{1}}课程:

((Slider)cp5.getController(getStepperName())).setRange(min, max);

为了更容易理解,这里分为两行:

Slider s = (Slider)cp5.getController(getStepperName());
s.setRange(min, max);