control p5 slider.setRange() не найден в подклассе

Я пытаюсь установить диапазон ползунка внутри подкласса, перехватывая соответствующий контроллер с помощью 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 ответ

Решение

На подобные вопросы лучше всего ответить, обратившись к API.

getController() Метод возвращает контроллер. Класс Controller не имеет setRange() функция. Этот случай бывает экземпляром Slider, который является подклассом Controller, но компилятор не может этого знать. Вот что вызывает твою ошибку.

Вы можете сказать компилятору, что экземпляр действительно Slider приведя возвращенное значение к Sliderи затем вы можете получить доступ к методам, определенным Slider учебный класс:

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

Чтобы было проще понять, здесь он разделен на две строки:

Slider s = (Slider)cp5.getController(getStepperName());
s.setRange(min, max);
Другие вопросы по тегам