我正在使用Processing,并且有一个方法(此处为smooth()
),当我在窗口中绘制时,我想将其用于PApplet
对象,而当我绘制图像时,则要用于PGraphics
。
问题是,这两个类(PApplet
&PGraphics
)仅从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
实例传递给函数。