Processing 处理:当类文件扩展PShape时,createShape()行为会发生变化

Processing 处理:当类文件扩展PShape时,createShape()行为会发生变化,processing,Processing,我只是在学习处理。我的背景是ActionScript。我正在创建一个绘制复杂对象的自定义类。作为这个类的一部分,我多次调用createShape()。在我决定需要自定义类来扩展PShape之前,一切都很顺利。现在它将无法识别我正在使用的createShape()语法,并返回一个错误,该错误表示“createShape()需要如下参数:createShape(PApplet,PShape)” 下面是返回PShape对象的函数。它很好用 class-MyClass { ... P形状生成三角形1(浮

我只是在学习处理。我的背景是ActionScript。我正在创建一个绘制复杂对象的自定义类。作为这个类的一部分,我多次调用createShape()。在我决定需要自定义类来扩展PShape之前,一切都很顺利。现在它将无法识别我正在使用的createShape()语法,并返回一个错误,该错误表示“createShape()需要如下参数:createShape(PApplet,PShape)”

下面是返回PShape对象的函数。它很好用

class-MyClass
{
...
P形状生成三角形1(浮动w,颜色c)
{
冲程连接(斜面);
PShape t=createShape(三角形,0,0,w,0,0,顶栏);
t、 设置填充(c);
返回t;
}
}
但当我这样做时,它会返回我上面引用的错误:

class MyClass扩展了PShape
{
...
P形状生成三角形1(浮动w,颜色c)
{
冲程连接(斜面);
PShape t=createShape(三角形,0,0,w,0,0,顶栏);
t、 设置填充(c);
返回t;
}
}

有什么想法吗?谢谢

PShape类有一个名为
createShape()
的函数。您可以在第1441行查看:

受静态保护的PShape createShape(PApplet父级,PShape src){
PShape dest=null;
if(src.family==组){
dest=parent.createShape(组);
PShape.copyGroup(父、src、dest);
}else if(src.family==基元){
dest=parent.createShape(src.kind,src.params);
PShape.copyPrimitive(src、dest);
}else if(src.family==几何图形){
dest=parent.createShape(src.kind);
形状复制几何(src、dest);
}else if(src.family==路径){
dest=parent.createShape(路径);
PShape.copyPath(src,dest);
}
目的地设置名称(src.name);
返回目的地;
}
请注意,该函数的参数是
PApplet
PShape

当您在该类中扩展
PShape
并调用
createShape()
时,Processing认为您正在尝试调用此函数。由于您的参数不匹配,因此会出现错误

要修复此错误,可以将草图
PApplet
传递到
MyClass
类中,并专门调用草图级别
createShape()
函数:

int-topBar=100;
MyClass mc;
无效设置(){
大小(500500);
mc=新的MyClass(本);
}
作废提款(){
背景(0);
形状(mc.makeTriangle1(100,#ff0000),200200);
}
类MyClass扩展了PShape{
丘疹素描;
公共MyClass(PApplet草图){
this.sketch=草图;
}
P形状生成三角形1(浮动w,颜色c)
{
冲程连接(斜面);
PShape t=sketch.createShape(三角形,0,0,w,0,0,顶栏);
t、 设置填充(c);
返回t;
}
}

但是,我强烈建议您重构代码,这样就不需要再扩展
PShape
。这样扩展一个处理类似乎很奇怪。很可能你应该使用。换句话说,你的类有-a,而不是你的类是-a
PShape
类有一个名为
createShape()
的函数。您可以在第1441行查看:

受静态保护的PShape createShape(PApplet父级,PShape src){
PShape dest=null;
if(src.family==组){
dest=parent.createShape(组);
PShape.copyGroup(父、src、dest);
}else if(src.family==基元){
dest=parent.createShape(src.kind,src.params);
PShape.copyPrimitive(src、dest);
}else if(src.family==几何图形){
dest=parent.createShape(src.kind);
形状复制几何(src、dest);
}else if(src.family==路径){
dest=parent.createShape(路径);
PShape.copyPath(src,dest);
}
目的地设置名称(src.name);
返回目的地;
}
请注意,该函数的参数是
PApplet
PShape

当您在该类中扩展
PShape
并调用
createShape()
时,Processing认为您正在尝试调用此函数。由于您的参数不匹配,因此会出现错误

要修复此错误,可以将草图
PApplet
传递到
MyClass
类中,并专门调用草图级别
createShape()
函数:

int-topBar=100;
MyClass mc;
无效设置(){
大小(500500);
mc=新的MyClass(本);
}
作废提款(){
背景(0);
形状(mc.makeTriangle1(100,#ff0000),200200);
}
类MyClass扩展了PShape{
丘疹素描;
公共MyClass(PApplet草图){
this.sketch=草图;
}
P形状生成三角形1(浮动w,颜色c)
{
冲程连接(斜面);
PShape t=sketch.createShape(三角形,0,0,w,0,0,顶栏);
t、 设置填充(c);
返回t;
}
}

但是,我强烈建议您重构代码,这样就不需要再扩展
PShape
。这样扩展一个处理类似乎很奇怪。很可能你应该使用。换句话说,您的班级拥有-a,而不是您的班级拥有-a,谢谢。我正在以ActionScript中的方式处理这个问题,因为这是我的主要参考框架。看来这可能是我问题的根源。谢谢。我正在以ActionScript中的方式处理这个问题,因为这是我的主要参考框架。看来这可能是我问题的根源。