Использование методов классов, которые не расширяют тот же родительский класс - PullRequest
1 голос
/ 11 мая 2019

Я использую Обработка, и у меня есть метод (smooth() здесь), который я хотел бы использовать для PApplet объекта, когда я рисую в окне, и для PGraphics, когда я рисую изображение.

Проблема в том, что эти два класса (PApplet & PGraphics) выходят только из класса Object, и Eclipse сказал, что я должен выбрать между PApplet cast или PGraphics cast, но я хочу использовать как в этом случае.

Как я могу это исправить?

1 Ответ

2 голосов
/ 13 мая 2019

Не существует волшебного способа поддержки двух совершенно разных типов.Однако есть несколько обходных путей.

Вы можете использовать перегрузку , что означает создание отдельных функций для каждого типа.Примерно так:

void drawRect(PGraphics pg){
  pg.rect(1, 2, 3, 4);
}

void drawRect(PApplet p){
  p.rect(1, 2, 3, 4);
}

Или вы можете полагаться на тот факт, что класс PApplet имеет переменную g, которая ссылается на его внутренний экземпляр PGraphics.Тогда вам понадобится только одна функция, которая принимает PGraphics и передает переменную g, когда у вас есть экземпляр PApplet.Примерно так:

void setup(){
 size(500, 500); 
}

void draw(){
 drawCircle(g); 
}

void drawCircle(PGraphics pg){
  pg.ellipse(mouseX, mouseY, 20, 20);
}

Этот подход немного хакерский, поэтому еще лучшим решением было бы реорганизовать ваш код PApplet, чтобы он всегда явно отображался в PGraphics.Затем вы можете передать этот PGraphics экземпляр вашей функции.

...