我正在使用Processing,并且有一个方法(此处为smooth()),当我在窗口中绘制时,我想将其用于PApplet对象,而当我绘制图像时,则要用于PGraphics

问题是,这两个类(PAppletPGraphics)仅从Object类扩展,Eclipse表示我必须在PApplet强制转换或PGraphics强制转换之间选择,但是我想在此两者中使用案件。

我该如何解决?

最佳答案

没有一种神奇的方法来支持两种完全不同的类型。不过,有两种解决方法。

您可以使用重载,这意味着为每种类型创建单独的函数。像这样:

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实例传递给函数。

08-28 19:20